wvogel日記

自分用の技術備忘録が多めです.

九九

で、今Haskellを触ってた
IOと通常の処理が別世界のものとして区別されるなら......
こんなことができるんじゃないか?
と思って描いてみたのが九九

main = putStr $ unlines $ map show $ map (kuku 1 []) [1..9]

kuku ::Int -> [Int] -> Int -> [Int]
kuku 9 xs n = xs++[9*n]
kuku x xs n = kuku (x+1) (xs++[n*x]) n

今思ったけど、ガード使って書いた方が綺麗だったか

私の今までの考えでは、1の段の掛け算を実行した時点で値を返してしまうのでそこで結果を出力したら終わっちゃうのでは、と思っていたけれど。
いやあ、気持ちいい

実行結果は

C:\ghc>kuku
[1,2,3,4,5,6,7,8,9]
[2,4,6,8,10,12,14,16,18]
[3,6,9,12,15,18,21,24,27]
[4,8,12,16,20,24,28,32,36]
[5,10,15,20,25,30,35,40,45]
[6,12,18,24,30,36,42,48,54]
[7,14,21,28,35,42,49,56,63]
[8,16,24,32,40,48,56,64,72]
[9,18,27,36,45,54,63,72,81]

ふむふむ
なるほど、副作用とか別世界、あたりの概念の糸口が見えた気がする