2012-09-26 54 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等。 –