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


Автор: симпопон 19.12.2010, 18:05
Нужно найти максимум в многоуровневой списке. но при этом не делая из него одноуровневый.
из начально я сделала так:
Код


(defun odno (x)
(cond ((eq x nil) nil)
      ((atom (car x)) (cons (car x) (odno (cdr x))))
      (t (append (odno (car x)) (odno (cdr x))))))
ODNO
CL-USER 2 > 
(odno '(2 (3 (4 5) 6) 7 (8 9) 10 (11 (12 13) 14) 15))
(2 3 4 5 6 7 8 9 10 11 12 13 14 15)


Код

(defun max1 (x)
                           (cond ((and (atom (car x)) (null (cdr x))) (car x))
                                     ((> (car x) (max1 (cdr x))) (car x))
                                     (t (max1 (cdr x)))))
MAX1

CL-USER 6 : 2 > 
(max1 '(2 3 4 5 6 7 8 9 10 1 2 3 4))
10

оказалось это слишком простой вариан.
теперь думаю нужно написать 1 функцию примерно такую:
Код

(defun max1 (x y) 
(cond ((> x y) x)
      (t y)))
MAX1

а потом
Код

(defun max2 (x)
(cond ((and (atom (car x)) (atom (cadr x))) (cons (max1 (car x) (cadr x)) (max2 (cdr x)))) 
      (t 0)))

а вот что за место нуля??? голову сломала уже. помогите пожалуйста.

Автор: VH_ 19.12.2010, 19:35
Код
(defun F (L)
 (if L
  ((lambda (elem result)
    (cond
     ((null result) elem)
     ((> elem result) elem)
     (T result)))
   ((lambda (elem)
     (if (atom elem) elem (F elem)))
    (car L))
   (F (cdr L)))))

Автор: симпопон 19.12.2010, 20:33
Спасибо!=))

Буду разбираться!

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