使用IO()在Haskell中创建左下角三角形



我试图理解为什么我的代码不工作:

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

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
* * * * 
* * * 
* * 
*

最新更新