将列表中每个列表的第三个元素求和

时间:2015-03-30 16:13:25

标签: lisp common-lisp

我目前有一个列表:

  <(>(图9 150 )(指南针13 35 )(水150 240 )(夹心50 16 >)(绳子50 49 ))

我正在尝试遍历此列表,以粗体显示值并总计这些值。我一直在看汽车和司机,但我似乎无法获得这些价值观。有一种简单的方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:10)

这将是列表中的third值或caddr。因此

(mapcar #'third products) ; ==>  (150 35 240 16 49)

如果您的列表很小,您可以使用apply:

(apply #'+ (mapcar #'third products)) ; ==> 490

对于更大的列表(超过1000个),我建议使用reduce

(reduce #'+ (mapcar #'third products)) ; ==> 490

使用reduce,您可以使用:key来避免mapcar

(reduce #'+ products :key #'third)     ; ==> 490

您还可以使用loop

(loop :for element :in products 
      :sum (third element))       ; ==> 490