haskellでpermutationを作ってみる

正確には順列じゃなくて nPmのn=mのときだけ。

import List
main=print $ permutation [1..3]
permutation (a:[]) = [[a]]
permutation  a =  concat $ zipWith (\x y->map (x:) (permutation (delete x y)))  a $ repeat a

結果

*Main> main
[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

数列表記版

import List
main=print $ permutation [1..3]
permutation [] = [[]]
permutation xs = concat [map (x:) (permutation (delete x xs))|x<-xs]