Здравствуйте, hexamino, Вы писали:
H>Надо получить все беспорядки [0..n], то есть все перестановки этого списка где ни один элемент не стоит на своем исходном месте.
H>H>disorders n = filter (and . (zipWith (/=) [0..n])) (permutations [0..n])
H>
filter (/=[0..n]) (permutations [0..n])
H>А можно ли не фильтровать, а сразу строить только нужные перестановки?
disorders n = inserts n (disorders (n-1)) ++ dropLast (inserts n [0..n-1])
-- вставляет x во все возможные позиции списка xs
inserts x [] = [х]]
inserts x xs = (x:xs) : map (head xs
(inserts x (tail xs) )
dropLast = reverse.tail.reverse