我有一个长度可以被二整除的列表,我正在寻找类似于 this 的答案的内容。问题:
(loop for (a b) on lst while b
collect (+ a b))
但是元素之间存在重叠:
(1 2 3 4 5) -> (3 5 7 9)
相加 1 和 2,然后相加 2 和 3 等等。
因为我有一个像 (1 2 3 4)
这样的列表,所以我正在寻找类似的东西
((1 2) (3 4))
作为输出。有没有办法让循环在列表中正确执行? 另一种解决方案。
最佳答案
像这样的东西应该可以工作:
(let ((list '(1 2 3 4)))
(loop :for (a b) :on list :by #'cddr :while b
:collect (cons a b)))
还有一个更详细的变体:
(let ((list '(1 2 3 4)))
(loop :for a :in list :by #'cddr
:for b :in (cdr list) :by #'cddr
:collect (cons a b)))
关于lisp - 普通口齿不清 : loop through pairs of a list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40028348/