应用Scheme中的apply函数

4

我在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个回答

8

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

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

换句话说,你试图做的事情是行不通的。

编辑:另一个选项是准引用。例如:

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

或者(不使用准引用)

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

明白了。从错误提示的措辞中应该能清楚地看出来。 - JasonFruit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接