我有(apply f '(x1 x2 x3 .... xn))
,我想将其更改为宏扩展:(f x1 x2 x3...xn)
。可能会出现什么样的问题?
答案 0 :(得分:2)
如果您只是转换
(define (my-apply f args)
(apply f args))
到
(define-macro (my-other-apply f args)
`(,f ,@args))
那么它似乎很简单。在这种情况下最大的缺陷是你必须记住不要引用传递给宏的列表。
>(my-apply + '(1 2 3))
>6
>(my-other-apply + '(1 2 3))
>ERROR syntax-error: "(+ quote 1 2 3)"
>(my-other-apply + (1 2 3))
>6