lisp - 普通口齿不清 : loop through pairs of a list

标签 lisp common-lisp sbcl

我有一个长度可以被二整除的列表,我正在寻找类似于 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/

相关文章:

lisp - Common Lisp 中的相互递归

lisp - 定车!并输入方案语言

common-lisp - 停止该方法调用:after

emacs - emacs 和 SBCL 的冲突(?) 'FORMAT' 功能

Emacs:如何将用户提供的最后一个参数存储为默认值?

macos - 在 OS X Cocoa 中实现 iOS 密码输入 View

loops - 在 Common Lisp 循环内的条件下收集并做某事

common-lisp - (sb-posix :chdir ) and (load)

common-lisp - 为什么应用大表上会引发CONTROL-STACK-EXHAUSTED-ERROR?

types - 如何指定 sbcl(或 common lisp)向量中的元素类型?