我在这里错过了什么?我正在玩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)
我有什么不明白的?
的问题'(+ (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)