Развернуть скобки? - PullRequest
       5

Развернуть скобки?

2 голосов
/ 12 сентября 2009

Я хочу написать код, используя рекурсивную функцию для удаления скобок в LIST.

Вот пример:

(unnest '(1 (2 (3)) (4 5))) ==> (1 2 3 4 5)

1 Ответ

5 голосов
/ 12 сентября 2009
(defun unnest (lst)
  (cond ((null? lst) '())
        ((not (list? lst)) (list lst))
        (t
         (append (unnest (car lst))
                 (unnest (cdr lst))))))

> (unnest '(1 (2 (3)) (4 5))) 
(1 2 3 4 5)

В основном идея заключается в следующем:

  • если у вас есть пустой список , то вам, очевидно, не нужно его отменять;
  • если это , а не список , то это должен быть атом, и поэтому вы возвращаете список, содержащий этот атом;
  • в последнем условии, у вас есть список , так что вы в основном говорите: результатом неопубликованного списка является неопубликованная версия первого элемента, добавленная к неопубликованной версии остальной части списка, и все, рекурсия позаботится обо всем остальном.

Надеюсь, это поможет.

...