Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (shadow '(let* let))
- (defmacro let ((&rest bindings) &body body)
- `((lambda ,(mapcar (lambda (binding)
- (if (listp binding)
- (first binding)
- binding))
- bindings)
- ,@body)
- ,@(mapcar (lambda (binding)
- (if (listp binding)
- (second binding)
- 'nil))
- bindings)))
- (defmacro let* ((&rest bindings) &body body)
- (if (endp bindings)
- `((lambda () ,@body))
- `((lambda (,(if (listp (first (last bindings)))
- (first (first (last bindings)))
- (first (last bindings))))
- (let* ,(butlast bindings) ,@body))
- ,(if (listp (first (last bindings)))
- (second (first (last bindings)))
- 'nil))))
- (macroexpand-1 '(let ((x 6) (y (* x x))) (+ x y)))
- --> ((lambda (x y) (+ x y)) 6 (* x x))
- t
- (macroexpand-1 '(let* ((x 6) (y (* x x))) (+ x y)))
- --> ((lambda (y) (let* ((x 6)) (+ x y))) (* x x))
- t
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement