九九の表
この間のRuby勉強会のお題をHaskellでやってみました。久しぶりにHaskell使いました。カンが鈍ってます。
module Main (main) where join :: [a] -> [[a]] -> [a] join sep = foldl1 (\ ss s -> ss ++ sep ++ s) kuku :: [[Int]] kuku = [map (n *) [1 .. 9] | n <- [1 .. 9]] formatKuku :: (Num a, Ord a) => [[a]] -> [[Char]] formatKuku xs @ (h : _) = header : sep : map body xs where header = " |" ++ (join " " $ map n2s h) sep = "---+--------------------------" body ns @ (n : _) = n2s n ++ " |" ++ (join " " $ map n2s ns) body _ = undefined n2s n | n < 0 = undefined | n < 10 = " " ++ show n | otherwise = show n formatKuku _ = undefined main :: IO () main = mapM_ putStrLn $ formatKuku kuku -- => | 1 2 3 4 5 6 7 8 9 -- ---+-------------------------- -- 1 | 1 2 3 4 5 6 7 8 9 -- 2 | 2 4 6 8 10 12 14 16 18 -- 3 | 3 6 9 12 15 18 21 24 27 -- 4 | 4 8 12 16 20 24 28 32 36 -- 5 | 5 10 15 20 25 30 35 40 45 -- 6 | 6 12 18 24 30 36 42 48 54 -- 7 | 7 14 21 28 35 42 49 56 63 -- 8 | 8 16 24 32 40 48 56 64 72 -- 9 | 9 18 27 36 45 54 63 72 81