将列表中每个列表的第三个元素相加

Sum third element of each list in a list

我目前的列表如下:

((map 9 150) (compass 13 35) (water 150 240) (sandwich 50 16) (rope 50 49))

我正在尝试遍历此列表以获取粗体值并给出这些值的总和。我一直在查看 car 和 cdr,但我似乎无法获得这些值。有没有简单的方法可以做到这一点?

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

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

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

(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