2016-11-27 8 views
0

リストのすべてのリストを1つにマージしようとしています。ここでリストのリストをマージしてループで返す

は、これまでの私のコードです:

(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言語を完全には知らないし、あなたが私を助けることができればそれを感謝します!

ありがとうございます!

+0

不適切なスタイル。 'initial(setf random-dynamic-variable init-value)'の代わりに 'with local-variable = init-value'を使いたいかもしれません。 'with'変数は一度バインドされ、ループの範囲内にあります。 – Kaz

答えて

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) 

を使用したり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を使用してサブリストをコピーしてください。

+0

ありがとうございました!私はそれが本当にそれをより困難にしていることを知っていた! – Nazariy1995

関連する問題