LISP仅检索列表项的第一个元素

时间:2012-09-26 01:59:42

标签: recursion lisp clisp

我有:

(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 个答案:

答案 0 :(得分:1)

你有括号问题 - (car (car pack))之后两个错位的括号,所以cond表达式在那里终止并且递归发生但结果被丢弃了。

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