申请方案申请

时间:2011-10-13 12:52:19

标签: scheme apply

我在这里缺少什么?我在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

我有什么不明白的?

1 个答案:

答案 0 :(得分:8)

'(+ (1 2 3))的问题在于+被引用,因此被解释为符号。

您必须使用eval获取+符号的值。

换句话说,你想要做的事情是行不通的。

编辑:另一种选择是quasiquote。例如:

(apply apply `(,+ (1 2 3))) ; => 6

或(没有quasiquote)

(apply apply (list + '(1 2 3))); => 6