add named-let
This commit is contained in:
parent
e68c69ceb1
commit
62069af4f9
|
@ -137,10 +137,24 @@
|
|||
(cons (f (car list))
|
||||
(map f (cdr list)))))
|
||||
|
||||
;;; bootstrap
|
||||
(define-macro (let bindings . body)
|
||||
(cons (cons 'lambda (cons (map car bindings) body))
|
||||
(map cadr bindings)))
|
||||
(if (symbol? bindings)
|
||||
(begin
|
||||
(define name bindings)
|
||||
(set! bindings (car body))
|
||||
(set! body (cdr body))
|
||||
;; expanded form should be like below:
|
||||
;; `(let ()
|
||||
;; (define ,loop
|
||||
;; (lambda (,@vars)
|
||||
;; ,@body))
|
||||
;; (,loop ,@vals))
|
||||
(list 'let '()
|
||||
(list 'define name
|
||||
(cons 'lambda (cons (map car bindings) body)))
|
||||
(cons name (map cadr bindings))))
|
||||
(cons (cons 'lambda (cons (map car bindings) body))
|
||||
(map cadr bindings))))
|
||||
|
||||
(define-macro (cond . clauses)
|
||||
(if (null? clauses)
|
||||
|
|
Loading…
Reference in New Issue