合并列表列表并循环返回

Naz*_*riy 0 lisp merge list common-lisp

我试图将所有列表列表合并为一个.

到目前为止,这是我的代码:

(DEFUN DESCRIPTION (BLOCK)
    (loop initially (setf result '())
        for desc in (DESC2 BLOCK) 
        do (append result desc)
        finally (return result)
        )
)
Run Code Online (Sandbox Code Playgroud)

函数(DESC2 BLOCK)返回以下内容:

((SHAPE BRICK) (COLOR GREEN) (SIZE SMALL) (SUPPORTED-BY B2) (SUPPORTED-BY B3))
Run Code Online (Sandbox Code Playgroud)

我只需要函数返回一个合并列表:

(SHAPE BRICK COLOR GREEN SIZE SMALL SUPPORTED-BY B2 SUPPORTED-BY B3)
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多方法并且已经研究了很多.我很抱歉,但我不完全了解LISP语言,如果你能帮助我,我将不胜感激!

先感谢您!

Rai*_*wig 6

只需将子列表附加到LOOP:

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)
Run Code Online (Sandbox Code Playgroud)

或者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)
Run Code Online (Sandbox Code Playgroud)

或使用 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)
Run Code Online (Sandbox Code Playgroud)

MAPCAN 函数映射到列表并破坏性地连接结果列表.因此用于COPY-LIST复制子列表.