前のエントリでは話がBrainf*ck(一応伏せ字にする)にいっちゃったけど,こっちが本題。
まったくもって乗り遅れたけど書いてみた。
import System showStar :: Int -> IO () showStar n = do putStrLn $ (show n) ++ " : " ++ (repeatStar n) repeatStar :: Int -> String repeatStar n = take n $ repeat '*' main = do args <- getArgs mapM_ showStar $ map read args
実行。
>runghc starbar.hs 3 8 5 3 : *** 8 : ******** 5 : *****
OK。いけてるぞ。
でも桁数の違う数が混じると汚いな。
>runghc starbar.hs 3 12 7 3 : *** 12 : ************ 7 : *******
まぁいいか。
追記:
(コメントから)
そうか。replicate を使えばいいのか。よし,ついでにポイントフリーにして,
Prelude> let repeatStar = flip replicate '*' Prelude> :t repeatStar repeatStar :: Int -> [Char] Prelude> repeatStar 7 "*******"
repeatStar n = replicate n ’*’