昨日やったことをHaskellでも。
実は。このやりかただとヨクナイ結果になることがあるのがわかっているのだけれども。そこは今はちょっと保留ということでご勘弁を。あとでおさらいする予定です。昨日のC++のコード自体にも不備があるし…。
ま。それはそれとして。
こんな感じで実装してみた。もうちょとすっきりするんぢゃないだろうか、というモヤモヤした感じが残る。
コードはGitHubにも置いてあります。
module DivideInto where divideInto :: Int -> [a] -> [[a]] divideInto n xs = split (((length xs) + n - 1) `div` n) xs split :: Int -> [a] -> [[a]] split _ [] = [] split m xs = xs1:(split m xs2) where (xs1, xs2) = splitAt m xs
試してみる。
import DivideInto main = putStrLn $ unlines $ divideInto 3 "12345678"
実行結果。
$ ./DivideIntoTest 123 456 78