From 05cca6ba24866185ffdbbf7505afdc34bfa85256 Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Thu, 23 Feb 2006 18:20:58 +0000 Subject: [PATCH] optimize keyword-get svn: r2305 original commit: f41698de15ce2f86cb64e75434d2b931abba1d98 --- collects/mzlib/kw.ss | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/collects/mzlib/kw.ss b/collects/mzlib/kw.ss index e2cef22..4544b0b 100644 --- a/collects/mzlib/kw.ss +++ b/collects/mzlib/kw.ss @@ -400,18 +400,23 @@ ;; keyword searching utility (note: no errors for odd length) (provide keyword-get) -(define (keyword-get args keyword . not-found) - (let loop ([args args]) - (cond [(or (null? args) (null? (cdr args)) (not (keyword? (car args)))) - (and (pair? not-found) ((car not-found)))] - [(eq? (car args) keyword) (cadr args)] - [else (loop (cddr args))]))) +(define keyword-get + (case-lambda + [(args keyword not-found) + (let loop ([args args]) + (cond [(or (null? args) (null? (cdr args)) (not (keyword? (car args)))) + (not-found)] + [(eq? (car args) keyword) (cadr args)] + [else (loop (cddr args))]))] + ;; the following makes another function call, but the code that is generated + ;; by this module never gets here + [(args keyword) (keyword-get* args keyword #f)])) ;; a private version of keyword-get that is used with simple values -(define (keyword-get* args keyword . not-found) +(define (keyword-get* args keyword not-found) (let loop ([args args]) (cond [(or (null? args) (null? (cdr args)) (not (keyword? (car args)))) - (and (pair? not-found) (car not-found))] + not-found] [(eq? (car args) keyword) (cadr args)] [else (loop (cddr args))])))