関数型プログラミング言語Haskell Part18
■ このスレッドは過去ログ倉庫に格納されています
005646
2012/03/21(水) 23:06:26.29tails' :: [a] -> [[a]]
tails' [] = []
tails' [x] = [[x]]
tails' xs = xs : tails' (tail xs)
comb1 :: [a] -> [[a]]
comb1 xs = map (:[]) xs
combN', combN :: ([a] -> [[a]]) -> [a] -> [[a]]
combN' f (x:xs) = map (x:) (f xs)
combN f xs = concatMap (combN' f) (tails' xs)
comb :: [a] -> Int -> [[a]]
comb xs n = (iterate combN comb1 !! (n-1)) xs
使用例
comb [1,2,3,4,5] 3
==>
[ [1,2,3], [1,2,4], [1,2,5], [1,3,4], [1,3,5]
, [1,4,5], [2,3,4], [2,3,5], [2,4,5], [3,4,5] ]
n重ループを分解した感じ
自分で書いたコードだが、なんか自分でムカツク
■ このスレッドは過去ログ倉庫に格納されています