【发布时间】:2019-12-12 14:46:53
【问题描述】:
我是 Lisp 的新手,遇到以下问题。
我正在尝试在多个列表中交换数字并生成列表列表作为结果,以便每个列表中第一个数字的所有数字都将收集在一个列表中,该列表是第一个元素结果列表;并且每个列表中排名第二的所有数字将被收集到另一个列表中,该列表是结果列表的第二个元素;等等。
这是一个例子:
(foo '((3 4 2 4) (2 5 6 9) (1 -2 8 10)) )
=> ((3 2 1) (4 5 -2) (2 6 8) (4 9 10))
我目前的解决方案是这样的:
(defun foo (list)
(mapcar #'list (values-list list))
)
据我了解,values-list 应该返回给定参数list 内的所有子列表。然后mapcar 将遍历每个子列表的每个元素,并将它们组成一个列表。
第二部分有效,但是发生的情况是只使用了第一个子列表,导致((3) (4) (2) (4)) 而不是((3 2 1) (4 5 -2) (2 6 8) (4 9 10))。
这是为什么?
(我正在使用 CLISP)。
【问题讨论】:
-
搜索“值列表 CLHS”。
-
在这种情况下,实现并没有什么不同,因为您所询问的行为在不同的实现中得到了很好的标准化。
标签: list lisp common-lisp map-function