我試圖理解為什么我的代碼不起作用:
writeRow :: Int -> IO()
writeRow x = putStr(concat (replicate x "* "))
triangle :: Int -> IO()
triangle x = do
writeRow x
putStr ""
triangle x-1
我的想法是,writeRow 創建一行 x 乘以“*”,所以如果 x = 4,三角形 4 會寫
* * * *
由于三角形以 x -1 遞回呼叫,因此下一行將是:
* * *
依此類推……直到:
* * * *
* * *
* *
*
但它只是在一行上輸出所有內容:
* * * * * * * *
似乎是什么問題?:D
uj5u.com熱心網友回復:
putStr只列印字串,不寫新行,你應該使用putStrLn. 此外,您應該triangle (x-1)在x-1零件周圍使用括號,并為三角形的遞回指定基本情況:
writeRow :: Int -> IO()
writeRow x = putStr(concat (replicate x "* "))
triangle :: Int -> IO()
triangle x | x <= 0 = pure ()
triangle x = do
writeRow x
putStrLn ""
triangle (x-1)
通過這些修改,我們得到:
Prelude> triangle 4
* * * *
* * *
* *
*
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/316837.html
標籤:哈斯克尔
