我在这里缺少什么?我在Scheme中玩apply
,并写道:
(apply apply '(+ (1 2 3)))
我理解它的方式,第一个应用应该:
(apply + '(1 2 3))
,第二个应该做:
(+ 1 2 3)
但Ypsilon和Gauche都犯了同样的错误(这是Ypsilon的):
error: attempt call non-procedure: (+ 1 2 3)
backtrace:
0 (apply apply '(+ (1 2 3)))
..."/dev/stdin" line 1
我有什么不明白的?
答案 0 :(得分:8)
'(+ (1 2 3))
的问题在于+
被引用,因此被解释为符号。
您必须使用eval
获取+
符号的值。
换句话说,你想要做的事情是行不通的。
编辑:另一种选择是quasiquote。例如:
(apply apply `(,+ (1 2 3))) ; => 6
或(没有quasiquote)
(apply apply (list + '(1 2 3))); => 6