let.scm: cleanups.
authorJan Nieuwenhuizen <janneke@gnu.org>
Wed, 27 Jul 2016 05:35:57 +0000 (07:35 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 27 Jul 2016 05:35:57 +0000 (07:35 +0200)
let.mes

diff --git a/let.mes b/let.mes
index c42062de0bbdfa43f1cedb3e1f36e5146c33381a..70375643bd0c62174c3e8b0ba87a160c88106b34 100644 (file)
--- a/let.mes
+++ b/let.mes
      (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)