0

我有:

(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. 为什么不将所有项目的第一个元素相加?

4

1 回答 1

1

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

(defun getTotalValue (pack)
 (cond ((null pack) 0)
       (t (+ (car (car pack)) (getTotalValue (cdr pack))))))
于 2012-09-26T02:05:16.093 回答