申请方案申请

Jas*_*uit 4 scheme apply

我在这里错过了什么?我正在玩applyScheme,写道:

(apply apply '(+ (1 2 3)))
Run Code Online (Sandbox Code Playgroud)

我理解它的方式,第一个应用应该做:

(apply + '(1 2 3))
Run Code Online (Sandbox Code Playgroud)

第二个应该做:

(+ 1 2 3)
Run Code Online (Sandbox Code Playgroud)

但Ypsilon和Gauche都给出了同样的错误(这是Ypsilon的):

error: attempt call non-procedure: (+ 1 2 3)

backtrace:
  0  (apply apply '(+ (1 2 3)))
  ..."/dev/stdin" line 1
Run Code Online (Sandbox Code Playgroud)

我有什么不明白的?

lep*_*pie 8

的问题'(+ (1 2 3))是,+被引用,因此解释为象征.

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

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

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

(apply apply `(,+ (1 2 3))) ; => 6
Run Code Online (Sandbox Code Playgroud)

或者(没有quasiquote)

(apply apply (list + '(1 2 3))); => 6
Run Code Online (Sandbox Code Playgroud)