Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LISP > Помогите с задачей


Автор: aik2029 19.4.2009, 16:51
Скажите, как можно (и можно ли вообще) превратить список вида

(1 (2 (3 4) 5) )

в такой вид: 

(1 2 3 4 5)

Автор: NightmareZ 16.9.2009, 10:15
Scheme

Код

(define (iter-append lst1 lst2)
    (if (= (length lst2) 0)
        lst1
        (if (list? (car lst2))
            (iter-append
                (iter-append lst1 (car lst2))
                (cdr lst2))
            (iter-append
                (append lst1 (list (car lst2)))
                (cdr lst2)))))


Вызываем:
Код

(iter-append '() '(1 (2 (3 4) 5)))

Получаем:
Код

(1 2 3 4 5)

Автор: VH_ 17.9.2009, 07:27
Хювёнен-Сеппянен "Мир Лиспа" т.1:
Код
(defun ONE-LEVEL (L) ; в оригинале В-ОДИН-УРОВЕНЬ
 (cond
  ((null L) nil)
  ((atom L) (cons L nil)) ; исправлено, в оригинале (cons (car L) nil)
  (T
   (append
    (ONE-LEVEL (car L))
    (ONE-LEVEL (cdr L))))))


Автор: _sg 25.4.2014, 09:55
Код

(defun flat (w &optional acc) 
  (cond ((null w) acc)
        ((atom w) (cons w acc))
        ((flat (car w) (flat (cdr w) acc)))))

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)