エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

N個の要素に分割する・Haskell篇

昨日やったこと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