Remove `labels' in favor of `letrec'
authorClinton Ebadi <clinton@unknownlamer.org>
Thu, 8 Oct 2009 19:31:57 +0000 (15:31 -0400)
committerClinton Ebadi <clinton@unknownlamer.org>
Thu, 8 Oct 2009 19:31:57 +0000 (15:31 -0400)
This is more general and is a better name given that Javascript does
not have separate value/function namespaces

src/package.lisp
src/special-forms.lisp

index 4e04212..af1bbac 100644 (file)
@@ -77,6 +77,7 @@
       #:psetq
       #:let*
       #:let
+      #:letrec
 
       ;; variables
       #:var
       ;; function definition
       #:defun
       #:lambda
-      #:labels
 
       ;; lambda lists
       #:&key
index 7109cf5..25dc963 100644 (file)
@@ -595,6 +595,14 @@ lambda-list::=
            ,@body))
       `(progn ,@body)))
 
+(defpsmacro letrec (bindings &body body)
+  `(let ,(mapcar (lambda (bind)
+                  (list (car bind) 'null))
+                bindings)
+     ,@(mapcar (lambda (bind) `(var ,(car bind) ,(cadr bind)))
+              bindings)
+     ,@body))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; iteration
 (defun make-for-vars/inits (init-forms)