From ca25a40e2c3260cf5d9470989ea64ab2bd1eabe0 Mon Sep 17 00:00:00 2001 From: Travis Cross Date: Sun, 30 Mar 2008 02:22:18 +0000 Subject: [PATCH] Added simple-let, which does parallel binding without a lambda. --- src/package.lisp | 1 + src/special-forms.lisp | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/src/package.lisp b/src/package.lisp index 1810946..5f04aba 100644 --- a/src/package.lisp +++ b/src/package.lisp @@ -73,6 +73,7 @@ #:setf #:defsetf #:simple-let* + #:simple-let #:let* #:lexical-let* #:lexical-let diff --git a/src/special-forms.lisp b/src/special-forms.lisp index ca72146..be0cfa5 100644 --- a/src/special-forms.lisp +++ b/src/special-forms.lisp @@ -570,6 +570,15 @@ lambda-list::= (simple-let* ,(cdr bindings) ,@body))) `(progn ,@body))) +(defpsmacro simple-let (bindings &body body) + (let ((vars (mapcar (lambda (x) (if (atom x) x (first x))) bindings)) + (vals (mapcar (lambda (x) (if (or (atom x) (endp (cdr x))) nil (second x))) bindings))) + (let ((gensyms (mapcar (lambda (x) (ps-gensym (format nil "_js_~a" x))) vars))) + `(simple-let* ,(mapcar #'list gensyms vals) + (simple-let* ,(mapcar #'list vars gensyms) + ,@(mapcar (lambda (x) `(delete ,x)) gensyms) + ,@body))))) + (defpsmacro let* (bindings &body body) `(simple-let* ,bindings ,@body)) -- 2.20.1