【发布时间】:2020-04-08 23:50:56
【问题描述】:
; Having this definition that creates identifier `self'
(define-syntax alambda
(lambda (stx)
(syntax-case stx ()
[(alambda lambda-list . body)
(with-syntax ([name (datum->syntax #'alambda 'self)])
#'(letrec ([name (lambda lambda-list . body)])
name))])))
; I want to "compose" it with another macro
(define-syntax-rule [apply-alambda args argv . body]
((alambda args . body) . argv))
; But then it doesn't work (while alambda itself does)
(apply-alambda [x] [5] (if (= 0 x) 1 (* x (self (- x 1)))))
; => Unbound variable: self
; (expected 120)
如何防止apply-alambda重命名self?
我尝试使用define-macro,但由于不同的原因,它也不起作用:
(defmacro apply-alambda [args argv . body]
((alambda args . body) . argv))
; => lambda: bad lambda in form (lambda args . body)
这里,我什至不知道出了什么问题
【问题讨论】: