2014-11-23 164 views
0

當我試圖運行下面的代碼參數類型錯誤 - +

(defun sa (L) 
    (cond 
    ((equal '+ (car L)) (soma (nth 0 L) (nth 2 L))) 
    (T (sa (cdr L))) 
)) 

這段代碼的目的是在列表中我總結兩個數字(位置0和2我已經收到此錯誤信息正在使用)。 L是使用

(setq a (list 1 '+ 2)) 
;also the soma function 
(soma (a b) (+ a b)) 

我知道這應該創建列表(1 + 2)。我知道問題是L在第一次傳球后回來的方式,因爲等於沒有返回true,但我不知道如何解決它。有什麼想法嗎?

+0

是'(SOMA(AB)(+ AB))'應該是'(defun定義SOMA(AB)(+ AB))'。向我們展示您正在使用的*實際*代碼很重要。 – 2014-11-24 03:28:08

回答

4

您正在訪問的比較錯誤的元素,試試這個來代替:

(equal '+ (car (cdr L))) 
+0

它的工作,謝謝你!你能解釋爲什麼我不能使用(車L)?是不是應該返回列表的第一個元素? – 2014-11-23 01:13:28

+1

@CelsoShigaki沒錯,但顯然你對列表中的_second_元素感興趣,這是表示運算符的元素。因此,我們用'cdr'去下一個列表和一個'car'來獲取它的第一個元素。或者,我們可以寫'(第1升)' – 2014-11-23 01:32:39

+1

@CelsoShigaki如果它解決了你的問題,接受答案。 – Barmar 2014-12-31 20:07:23