如果我有:(应用f'(x1 x2 x3 .... xn))并且我想将其更改为宏扩展

时间:2010-02-19 19:18:22

标签: scheme

我有(apply f '(x1 x2 x3 .... xn)),我想将其更改为宏扩展:(f x1 x2 x3...xn)。可能会出现什么样的问题?

1 个答案:

答案 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