Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.107.130] |
|
Сообщ.
#1
,
|
|
|
Народ!!! Я вижу тут много умников по лиспу собралось. Не могли бы вы помочь начинающему лисперу решить задачку. В последующем смогу присоединиться и пополнить ряды лисперов по обмену опытом!!!
Задача: Написать функцию, генерирующую все циклические перестановки списка. Пусть элементами множества являются списки. Написать функцию, генерирующую все перестановки этого множества с учетом перестановок внутренних списков, т.е. перестановки множества ((A B)(C D)) - это (((A B)(C D)) ((B A)(C D)) ((A B)(D C)) ((B A)(D C)) ((C D)(A B)) ((D C)(A B)) ((C D)(B A)) ((D C)(B A))). И все в таком духе. Буду Очень Признателен!!! П. С. На худой конец, Если очень ломает, идею или ресурсы обучалок подскажите. |
Сообщ.
#2
,
|
|
|
Цитата Написать функцию, генерирующую все циклические перестановки списка. (defun rotate-list (list) (if (null list) nil (append (cdr list) (list (car list))))) (defun all-rotations (list) (if (null list) (list list) (loop for x in list for y = list then (rotate-list y) collect y))) Цитата Написать функцию, генерирующую все перестановки этого множества с учетом перестановок внутренних списков (defun all-permutations (list) (if (atom list) (list list) (loop for (x . tail) on list and head = nil then (cons x head) append (mapcar (lambda (y) (cons x y)) (all-permutations (append head tail)))))) (defun all-deep-permutations (mlist) (if (atom mlist) (list mlist) (mapcan #'all-embedded-permutations (all-permutations mlist)))) (defun all-embedded-permutations (mlist) (if (atom mlist) (list mlist) (map-descartes-product #'cons (all-deep-permutations (car mlist)) (all-embedded-permutations (cdr mlist))))) (defun map-descartes-product (f xs ys) (mapcan (lambda (x) (mapcar (lambda (y) (funcall f x y)) ys)) xs)) ;;; (all-deep-permutations '((a b) (c d))) Цитата ресурсы обучалок подскажите http://www.cliki.net/index/Online%20Tutorial |
Сообщ.
#3
,
|
|
|
Цитата Народ!!! Я вижу тут много умников по лиспу собралось. Не могли бы вы помочь начинающему лисперу решить задачку. В последующем смогу присоединиться и пополнить ряды лисперов по обмену опытом!!! Задача: Написать функцию, генерирующую все циклические перестановки списка. Пусть элементами множества являются списки. Написать функцию, генерирующую все перестановки этого множества с учетом перестановок внутренних списков, т.е. перестановки множества ((A B)(C D)) - это (((A B)(C D)) ((B A)(C D)) ((A B)(D C)) ((B A)(D C)) ((C D)(A B)) ((D C)(A B)) ((C D)(B A)) ((D C)(B A))). И все в таком духе. Буду Очень Признателен!!! П. С. На худой конец, Если очень ломает, идею или ресурсы обучалок подскажите. PS: На худой конец вот сюда жмакай. http://www.progz.ru/forum/viewforum.php?f=10&sid=d3d8db3537fb3af04db373db48894595 |
Сообщ.
#4
,
|
|
|
Alexey Dejneka!!!
Я очнь рад, что ты отозвался, но мою задачу надо решить без единого гвоздика, т. е. рекурсивно... Я то так и сам понял в чем фишка. А вот с рекурсией геморой... Нельзя ли чуток переделать? В любом случае спасибо... Надеюсь смогу отплатить той же монетой. Я только учусь, но могу помочь по C/C++, Pascal, Java. |
Сообщ.
#5
,
|
|
|
попробуй вот так:
(defun fold-right (op initial sequence) "Folds `sequence' with `op' right-to-left with `initial' operand." (if (null sequence) initial (funcall op (car sequence) (fold-right op initial (cdr sequence))))) (defun flat (x) "Flats '((x1 x2) (x3 x4)) to '(x1 x2 x3 x4)." (fold-right #'append '() x)) (defun cyclic-permutations (xlist) "Do a '(x1 x2 x3) => '((x1 x2 x3) (x3 x1 x2) (x2 x3 x1)) stuff." (labels ((cycle (left right result) (if (null right) result (let ((left2 (append left (list (car right)))) (right2 (cdr right))) (cycle left2 right2 (cons (append right2 left2) result)))))) (cycle nil xlist nil))) (defun deep-cyclic-perms (xlist) (if (null xlist) (list nil) (flat (mapcar (lambda (permut) (cyclic-permutations permut)) (flat (mapcar (lambda (cdr-perm) (if (listp (car xlist)) (mapcar (lambda (car-perm) (cons car-perm cdr-perm)) (deep-cyclic-perms (car xlist))) (list (cons (car xlist) cdr-perm)))) (deep-cyclic-perms (cdr xlist)))))))) Цитата Platon @ Надеюсь смогу отплатить той же монетой. может, зарегистрироваться для начала? Цитата Platon @ Я очнь рад, что ты отозвался, но мою задачу надо решить без единого гвоздика, т. е. рекурсивно... цикл представляем хвостовой рекурсией, так что нормально решение, вроде. |
Сообщ.
#6
,
|
|
|
uj!!!
Большой Dankeschon!!! Очень признателен!!!! Уже зарегался!!! Только не знаю как это мне и вам поможет Рейтинг поднял!!! В любом случае всем спасибо за участие Пишите может пригожусь!!! |