Генерация всех перестановок заданного списка - Lisp
Формулировка задачи:
Помогите решить задачу:
Написать программу, возвращающую список всех перестановок элементов данного списка по примеру:
заранее спасибо
Заданное выражение:
Описать функцию, возвращающую максимальную глубину списка.
РЕШЕНИЕ:
(defun depth (L)
(labels
( ( depth-iter (L newL curDept cnt)
(if (null L)
(if (= cnt 0) curDepth
(depth-iter newL () (+ curDepth 1) 0 ))
(let ((fstL (car L)))
(if (listp fstL)
(depth-iter (cdr L)
(append fstL newL)
curDepth
(+ 1 cnt))
(depth-iter (cdr L) newL curDepth cnt ))))) )
(depth-iter L () 1 0 )))
(print (depth '( A B (C ((D E) F (G) H) I (J (K () L)))
(M (N ((O P ())) Q ((R) (S T))) (U ((V) W)))
((X) ()) (((((() Y))))) )))
(print (depth '(() (()))))
(print (depth '(())))
(print (depth '()))Решение задачи: «Генерация всех перестановок заданного списка»
textual
Листинг программы
"Masha ela kashu" [ blank? ] split-when all-permutations [ " " join capitalize1 ] map [ print ] each