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


Автор: Railko 17.12.2012, 18:03
Здравствуйте. Есть задача, помогите пожалуйста ее решить. Заранее спасибо. 

Определить функцию, преобразующую список (a (b (с))) к виду(a b c).


Автор: _sg 17.12.2012, 18:50
Код

(defun flat (w &optional acc) 
  (cond ((null w) acc)
        ((atom w) (cons w acc))
        ((flat (car w) (flat (cdr w) acc)))))
 
> (flat '(a (b (c))))
(A B C)

Автор: Catstail 14.1.2013, 19:22
Мне кажется, Вы проделали лишнюю работу... Если списки имеют вид (a (b (c (d (e (f)))))), то проще так:

Код

(defun trans (lst)
  (cond ((null lst) nil)
        (t (cons (car lst) (trans (cadr lst))))))

==> trans

(trans '(a (b (c (d (e))))))

==> (a b c d e)


Автор: _sg 14.1.2013, 20:03
Код

(defun meet (w)
  (when w (cons (car w) (meet (cadr w)))))

> (meet '(a (b (c (d (e))))))
(A B C D E)

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