List 合并列表列表并在循环中返回

List 合并列表列表并在循环中返回,list,merge,lisp,common-lisp,List,Merge,Lisp,Common Lisp,我正在尝试将所有列表合并为一个列表 以下是我目前的代码: (DEFUN DESCRIPTION (BLOCK) (loop initially (setf result '()) for desc in (DESC2 BLOCK) do (append result desc) finally (return result) ) ) 函数(DESC2块)返回以下内容: ((SHAPE BRICK) (COLOR GREE

我正在尝试将所有列表合并为一个列表

以下是我目前的代码:

(DEFUN DESCRIPTION (BLOCK)
    (loop initially (setf result '())
        for desc in (DESC2 BLOCK) 
        do (append result desc)
        finally (return result)
        )
)
函数(DESC2块)返回以下内容:

((SHAPE BRICK) (COLOR GREEN) (SIZE SMALL) (SUPPORTED-BY B2) (SUPPORTED-BY B3))
我只需要函数返回一个合并列表:

(SHAPE BRICK COLOR GREEN SIZE SMALL SUPPORTED-BY B2 SUPPORTED-BY B3)
我尝试了很多方法,做了很多研究。很抱歉,我不完全懂LISP语言,如果您能帮助我,我将不胜感激


提前谢谢你

只需在
循环中附加子列表

CL-USER 23 > (loop for l in '((SHAPE BRICK) (COLOR GREEN) (SIZE SMALL)
                              (SUPPORTED-BY B2) (SUPPORTED-BY B3))
                   append l)
(SHAPE BRICK COLOR GREEN SIZE SMALL SUPPORTED-BY B2 SUPPORTED-BY B3)
或者使用
REDUCE
APPEND

CL-USER 24 > (reduce #'append
                     '((SHAPE BRICK) (COLOR GREEN) (SIZE SMALL)
                       (SUPPORTED-BY B2) (SUPPORTED-BY B3)))
(SHAPE BRICK COLOR GREEN SIZE SMALL SUPPORTED-BY B2 SUPPORTED-BY B3)
或者使用
MAPCAN

CL-USER 25 > (mapcan #'copy-list
                     '((SHAPE BRICK) (COLOR GREEN) (SIZE SMALL)
                       (SUPPORTED-BY B2) (SUPPORTED-BY B3)))
(SHAPE BRICK COLOR GREEN SIZE SMALL SUPPORTED-BY B2 SUPPORTED-BY B3)

MAPCAN
将函数映射到列表上,并以破坏性方式连接结果列表。因此,使用
COPY-LIST
复制子列表。

只需将子列表附加到
循环中即可:

CL-USER 23 > (loop for l in '((SHAPE BRICK) (COLOR GREEN) (SIZE SMALL)
                              (SUPPORTED-BY B2) (SUPPORTED-BY B3))
                   append l)
(SHAPE BRICK COLOR GREEN SIZE SMALL SUPPORTED-BY B2 SUPPORTED-BY B3)
或者使用
REDUCE
APPEND

CL-USER 24 > (reduce #'append
                     '((SHAPE BRICK) (COLOR GREEN) (SIZE SMALL)
                       (SUPPORTED-BY B2) (SUPPORTED-BY B3)))
(SHAPE BRICK COLOR GREEN SIZE SMALL SUPPORTED-BY B2 SUPPORTED-BY B3)
或者使用
MAPCAN

CL-USER 25 > (mapcan #'copy-list
                     '((SHAPE BRICK) (COLOR GREEN) (SIZE SMALL)
                       (SUPPORTED-BY B2) (SUPPORTED-BY B3)))
(SHAPE BRICK COLOR GREEN SIZE SMALL SUPPORTED-BY B2 SUPPORTED-BY B3)

MAPCAN
将函数映射到列表上,并以破坏性方式连接结果列表。因此,请使用
COPY-LIST
复制子列表。

非常感谢!我知道我让事情变得更难了,事实就是这样!非常感谢你!我知道我让事情变得更难了,事实就是这样!糟糕的风格。您可能希望将
与局部变量=init value一起使用,而不是最初使用
(setf随机动态变量init value)
<带有
的代码>变量在循环范围内绑定一次。错误样式。您可能希望将
与局部变量=init value一起使用,而不是最初使用
(setf随机动态变量init value)
<带有
的code>变量在循环范围内绑定一次。