私はHaskellを学び始めたばかりですが、ループが存在しないことは今、非常にイライラしています。関数のループの書き方を見つけました。しかし、私の問題は、ループを繰り返しながらいくつかの結果を出力したいということです。この単純なタスクを実行するには、デバッグを使用する必要があるようです。
ですから、今は、メイン構造体で文字列を10回印刷する方法の例に感謝します。
言い換えれば、私はこれを10回やりたい:
main = do
putStrLn "a string"
ありがとう。これは私の仕事にとって非常に明るいものになると思います。
次のように、「文字列」をn回出力する再帰関数を定義できます(nは関数のパラメーターです)。
printStringNTimes 0 = return ()
printStringNTimes n =
do
putStrLn "a string"
printStringNTimes (n-1)
main = printStringNTimes 10
やや一般的なアプローチは、任意のIOアクションをn回繰り返す関数を定義することです。
repeatNTimes 0 _ = return ()
repeatNTimes n action =
do
action
repeatNTimes (n-1) action
main = repeatNTimes 10 (putStrLn "a string")
上記の関数は、Control.Monad
という名前でreplicateM_
に既に存在します。
HaskellのIOはモナドに基づいているため、始めたばかりのときは少し注意が必要です。
あなたの問題には簡単な解決策があります:
main = replicateM_ 10 $ putStrLn "a string"
これはコンビネータを使用していますreplicateM_
from Control.Monad
モナドアクションを作成および実行するための便利な関数がたくさんあります。
私はHaskellの初心者でもあり、エレガントではないが実用的には役立つ解決策があります。
main = do
putStr result
where
string = "a string"
result = concat [string ++ "\n" | i <- [1,2..10]]
そのため、ここでリストを定義しました。そのリストの要素は、印刷したい文字列とそれに続く改行文字です。