九九を表示するプログラム
http://d.hatena.ne.jp/kazu-yamamoto/searchdiary?of=90&word=*[Haskell] をちょろっとみて,気になったので書いてみた.
まずは九九の1〜5までをリストで生成.mapと再起.
kuku :: (Num a) => [a] -> [a] -> [[a]] kuku [] ln = [] kuku (x:xs) ln = (map (* x) ln) : kuku xs ln main :: IO () main = print $ kuku [1..5] [1..5]
bash-3.2$ runhaskell.exe kuku.hs [[1,2,3,4,5],[2,4,6,8,10],[3,6,9,12,15],[4,8,12,16,20],[5,10,15,20,25]]
リストを文字列として出力するプログラム.
main = print $ rowToLine [1..5] rowToLine :: (Show a) => [a] -> String rowToLine = concatMap (\x -> " " ++ (show x) ++ " ")
bash-3.2$ runhaskell.exe kk.txt " 1 2 3 4 5 "
最終的にできたプログラム.pretykuku関数にご注目.unlinesは行のリストを連結して文字列にし,各行の末尾に改行文字を付加する.
kuku :: (Num a) => [a] -> [a] -> [[a]] kuku [] ln = [] kuku (x:xs) ln = (map (* x) ln) : kuku xs ln main :: IO () main = print $ pretykuku $ kuku [1..5] [1..5] rowToLine :: (Show a) => [a] -> String rowToLine = concatMap (\x -> " " ++ (show x) ++ " ") pretykuku :: (Show a) => [[a]] -> String pretykuku = unlines . (map rowToLine)
bash-3.2$ runhaskell.exe kk.txt " 1 2 3 4 5 \n 2 4 6 8 10 \n 3 6 9 12 15 \n 4 8 12 16 20 \n 5 10 15 20 25 \n"