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

标签 lisp common-lisp

我目前有这样一个列表:

((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:

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

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

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

使用reduce你可以使用:key来避免mapcar:

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

你也可以使用循环:

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

关于lisp - 将列表中每个列表的第三个元素相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29351108/

相关文章:

inheritance - 菱形继承(钻石问题)和 Common Lisp 对象系统

numbers - 为什么在 LISP 中,没有数量限制?

javascript - 理解 scheme 中的 fold 和 reduce 函数

scheme - Scheme中如何遍历一棵n叉树?

function - 使用 Common Lisp 宏自动生成的预定义函数

lisp - 如何在 LISP 中读取文本文件?

lisp - 不能用 do 循环在 lisp 中求和

lisp - 在lisp中暂停算术运算

recursion - LISP 迭代到递归

scheme - 数字的数字列表