This is more general and is a better name given that Javascript does
not have separate value/function namespaces
#:psetq
#:let*
#:let
+ #:letrec
;; variables
#:var
;; function definition
#:defun
#:lambda
- #:labels
;; lambda lists
#:&key
,@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)