2012-09-26 52 views
0

我的第一個元素:LISP只檢索列表項

(defun getTotalValue(pack) 
    (cond ((null pack) 0) 
    (t (+ (car (car pack)))) (getTotalValue (cdr pack)) 
) 
) 

其中,我的理解,加起來在列表中的所有項目的第一要素。測試函數調用將是:

(getTotalValue '((10 c u) (3 s u) (5 h d) (7 s d) (12 h u))) 

然而,當我運行上面的代碼,它只是打印出的第一個項目的第一個元素在列表中,10。爲什麼不加起來所有項目的第一個元素?

回答

1

您有加圓括號問題 - 在(car (car pack))之後出現兩個錯位的右括號,因此cond表達式在此處終止,發生遞歸但結果被丟棄。

(defun getTotalValue (pack) 
(cond ((null pack) 0) 
     (t (+ (car (car pack)) (getTotalValue (cdr pack)))))) 
+0

非常感謝。看了這麼長時間以後,我一定會找到一個比它簡單的更復雜的問題! –

+2

不客氣:)有一些技巧,你可以使用一個體面的Lisp編輯器(例如Emacs)來簡化平衡括號 - 顏色編碼,突出顯示匹配的parens等。 –