2016-11-27 5 views
0

Я пытаюсь объединить весь список списков в один.Объединить список списков и вернуться в цикле

Вот мой код до сих пор:

(DEFUN DESCRIPTION (BLOCK) 
    (loop initially (setf result '()) 
     for desc in (DESC2 BLOCK) 
     do (append result desc) 
     finally (return result) 
     ) 
) 

Функция (DESC2 BLOCK) возвращает следующее:

((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)' вы можете использовать 'с 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

 Смежные вопросы

  • Нет связанных вопросов^_^