2011-10-13 34 views
4

我在這裏錯過了什麼?我是在方案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 

我有什麼不明白的地方?

回答

8

'(+ (1 2 3))的問題在於+被引用,因此被解釋爲符號。

您將不得不使用eval來獲得+符號的值。

換句話說,你正在努力做什麼,是不會工作的。

編輯:另一種選擇是quasiquote。例如:

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

或(不quasiquote)

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

明白了。這應該從錯誤的措辭中明確。 – JasonFruit

相關問題