From af1b6dc88db168cb321c1560b0cd52e60294e545 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Wed, 27 Jul 2016 07:35:57 +0200 Subject: [PATCH] let.scm: cleanups. --- let.mes | 44 ++++++++++---------------------------------- 1 file changed, 10 insertions(+), 34 deletions(-) diff --git a/let.mes b/let.mes index c42062de..70375643 100644 --- a/let.mes +++ b/let.mes @@ -27,44 +27,20 @@ (set! ,label (lambda ,(map car bindings) ,@rest)) (,label ,@(map cadr bindings)))) -(define-macro (combined-let bindings-or-label . rest) - (display - `(,`(cond - (,(symbol? bindings-or-label) - (lambda () ,(cons* 'named-let bindings-or-label `(car ,rest) `(cdr ,rest)))) - (#t - (lambda () ,(cons* 'simple-let bindings-or-label rest)) - )))) - (newline) - `(,`(cond - (,(symbol? bindings-or-label) - (lambda () ,(cons* 'named-let bindings-or-label `(car ,rest) `(cdr ,rest)))) - (#t - (lambda () ,(cons* 'simple-let bindings-or-label rest)) - )))) - - - - -(define (split-params bindings params) - (cond ((null? bindings) params) - (#t (split-params (cdr bindings) - (append params (cons (caar bindings) '())))))) - -(define (split-values bindings values) - (cond ((null? bindings) values) - (#t (split-values (cdr bindings) - (append values (cdar bindings) '()))))) +(define-macro (let bindings-or-label . rest) + `(`,(cond (,(symbol? bindings-or-label) + (list 'lambda '() (cons* 'named-let ,bindings-or-label ,(car rest) ,(cdr rest)))) + (#t + (list 'lambda '() (cons* 'simple-let ,bindings-or-label ,rest)))))) (define-macro (xsimple-let bindings rest) - `((lambda ,(split-params bindings '()) ,@rest) - ,@(split-values bindings '()))) + `(,`(lambda ,(map car bindings) ,@rest) + ,@(map cadr bindings))) (define-macro (xnamed-let label bindings rest) - `((lambda (,label) - (set! ,label (lambda ,(split-params bindings '()) ,@rest)) - (,label ,@(split-values bindings '()))) - *unspecified*)) + `(simple-let ((,label *unspecified*)) + (set! ,label (lambda ,(map car bindings) ,@rest)) + (,label ,@(map cadr bindings)))) (define-macro (let bindings-or-label . rest) `(cond (,(symbol? bindings-or-label)