lisp - 如何在普通 lisp 中从一个奇数对和偶数对的单个列表创建列表列表

标签 lisp common-lisp

我是 Lisp 编程的新手,正在尝试从 lisp 中的一个列表创建子列表,其中一对奇数和偶数来自列表。例如: 我有一个 list

ListA ("a" "b" "c" "d" "e" "f" "g" "h") 

现在我想转换成下面的列表:

enter code here
ListB  ( ("a" "b") ("c" "d") ("e" "f") ("g" "h") )

所以总是会生成值为((first second)(third fourth)(fifth sixth).........)的子列表

我尝试了多种方法,例如首先取出奇数项和偶数项并使用函数 (list (oddlist evenlist)) 但在上面的 ListB 中没有超过预期值。有人可以在这方面帮助我吗.非常感谢您的帮助。

最佳答案

这对于 loop 实际上非常很短:

(loop for (x y) on '(a b c d e f) by #'cddr
      collect (list x y))
;=> ((A B) (C D) (E F))

如果你有奇数个元素,这确实会在最后一对中给你一个 NIL,但你没有提到在这种情况下应该发生什么:

(loop for (x y) on '(a b c d e f g ) by #'cddr
      collect (list x y))
;=> ((A B) (C D) (E F) (G NIL))

关于lisp - 如何在普通 lisp 中从一个奇数对和偶数对的单个列表创建列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29314957/

相关文章:

common-lisp - CLOS:我在这里做什么,在元类中设置一个槽?

list - 从 LISP 的列表中删除 Or

lisp - 可以像在 C# 中那样在 LISP 中重载函数吗?

emacs - 在 Emacs-AUCTeX 中更改单词的格式而不实际选择它

lisp - 从列表中删除列表

loops - 我应该避免重置 "by hand"一个自动递增的循环变量吗?

lisp - 在 lisp 中用深度递归删除

emacs - 使用 slime 时如何跳转到 emacs 中的函数定义?

stream - Racket 中的可变 zip

common-lisp - 通过Lisp地带的封闭示例进行内存