-2
взято отсюда:
import Data.List
perm [] = [[]]
perm xs = [x:ps | (hs, x:ts) <- (inits xs `zip` tails xs), ps <- perm (hs ++ ts)]
работа:
> perm [1,2,3]
[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
> perm [1,2,3,4]
[[1,2,3,4],[1,2,4,3],[1,3,2,4],[1,3,4,2],[1,4,2,3],[1,4,3,2],[2,1,3,4],[2,1...