関数型プログラミング言語Haskell Part28 [転載禁止]©5ch.io
レス数が950を超えています。1000を超えると書き込みができなくなります。
0979デフォルトの名無しさん
2017/01/13(金) 18:09:13.37ID:KeMBxxc7runlen [] = []
runlen (x:xs) = rl x 1 xs
rl x k [] = [(x,k)]
rl x k (y:ys) = if x == y then rl x (k+1) ys else (x,k) : rl y 1 ys
combi' [] _ = []
combi' [x] y = if x >= y then [[y]] else []
combi' (x:xs) y = [ h : t | h <- reverse [0..min x y], t <- combi' xs (y-h) ]
combi str n =
let xs = runlen str in
let str' = map fst xs in
[ concat (zipWith replicate y str') | y <- combi' (map snd xs) n ]
レス数が950を超えています。1000を超えると書き込みができなくなります。