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

use*_*514 2 lisp common-lisp

我目前有一个列表,如:

((地图9 150)(指南针13 35)(水150 240)(三明治50 16)(绳50 49))

我试图循环这个列表获取粗体值,并给出这些值的总和.我一直在看汽车和司机,但我似乎无法获得这些价值观.有一个简单的方法吗?

Syl*_*ter 10

这将是third列表中的值或caddr.从而

(mapcar #'third products) ; ==>  (150 35 240 16 49)
Run Code Online (Sandbox Code Playgroud)

如果您的清单很小,您可以使用申请:

(apply #'+ (mapcar #'third products)) ; ==> 490
Run Code Online (Sandbox Code Playgroud)

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

(reduce #'+ (mapcar #'third products)) ; ==> 490
Run Code Online (Sandbox Code Playgroud)

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

(reduce #'+ products :key #'third)     ; ==> 490
Run Code Online (Sandbox Code Playgroud)

您还可以使用loop:

(loop :for element :in products 
      :sum (third element))       ; ==> 490
Run Code Online (Sandbox Code Playgroud)