Haskell程序打印左三角星形图案


在Haskell中,打印左三角星形图案将使用`mapM_`函数,`replicate`函数和递归。在第一个示例中,我们将使用在`main`函数下定义的`(mapM_ putStrLn [replicate i '*' | i <- [1..n]])`函数,在第二个示例中,我们将使用用户自定义函数`(printLeftTriangle n = mapM_ putStrLn [replicate i '*' | i <- [1..n]])`。在第三个示例中,我们将使用递归函数`(leftTriangle n = if n > 0 then leftTriangle (n-1) >> putStrLn (replicate n '*') else return ())`。

方法一:在`main`函数下使用`mapM_`函数打印左三角星形图案

在这种方法中,我们首先将三角形的行数定义为n(在本例中,n = 5)。然后,我们使用列表推导式生成一个字符串列表,其中每个字符串都是三角形的一行。每一行都是使用`replicate i '*'`生成的,它创建一个包含i个星号的字符串。最后,我们使用`mapM_ putStrLn`在单独的行上打印三角形的每一行。

算法

  • 步骤1 - 程序执行将从`main`函数开始。`main()`函数控制整个程序。它写成`main = do`。

  • 步骤2 - 命名为“n”的变量被初始化,它将保存要打印左星形图案的行数。

  • 步骤3 - `mapM_`函数与`replicate`函数一起使用来打印生成的左星形图案,例如`mapM_ putStrLn [replicate i '*' | i <- [1..n]]`。

示例

在这个例子中,左三角星形图案是使用在`main`函数下定义的`mapM_`函数打印的。

main :: IO ()
main = do
  let n = 5
  mapM_ putStrLn [replicate i '*' | i <- [1..n]]

输出

[1 of 1] Compiling Main             ( main.hs, main.o )
Linking main ...
*
**
***
****
*****

方法二:使用用户定义函数中定义的`mapM_`函数打印左三角星形图案

在这种方法中,`printLeftTriangle`函数接收一个整数n作为输入,并打印大小为n的左三角星形图案。`mapM_`函数用于将`putStrLn`函数应用于列表推导式生成的星号列表中的每个字符串。`replicate`函数用于生成i个星号的字符串,其中i的范围从1到n。列表推导式生成一个长度递增的字符串列表,然后使用`putStrLn`在单独的行上打印这些字符串。

算法

  • 步骤1 - 用户定义的`printLeftTriangle`函数与`replicate`函数一起使用来打印生成的左星形图案,例如`printLeftTriangle n = mapM_ putStrLn [replicate i '*' | i <- [1..n]]`。

  • 步骤2 - 程序执行将从`main`函数开始。`main()`函数控制整个程序。它写成`main = do`。

  • 步骤3 - 命名为“n”的变量被初始化,它将保存要打印左星形图案的行数。

  • 步骤4 - 函数被调用后,生成的左三角星形图案将被打印到控制台。

示例

在这个例子中,左三角星形图案是使用在用户定义函数中定义的`mapM_`和`replicate`函数打印的。

printLeftTriangle :: Int -> IO ()
printLeftTriangle n = mapM_ putStrLn [replicate i '*' | i <- [1..n]]

main :: IO ()
main = do
  let n = 5
  printLeftTriangle n

输出

[1 of 1] Compiling Main             ( main.hs, main.o )
Linking main ...
*
**
***
****
*****

方法三:使用递归打印左三角星形图案

在这种方法中,函数接收一个整数n作为输入,并递归地打印n行,每行都有n个星号。当n小于或等于0时,递归停止,`return ()`语句结束递归。

算法

  • 步骤1 - 使用递归定义用户定义的`leftTriangle`函数,例如`leftTriangle n = if n > 0 then leftTriangle (n-1) >> putStrLn (replicate n '*') else return ()`。

  • 步骤2 - 程序执行将从`main`函数开始。`main()`函数控制整个程序。它写成`main = do`。

  • 步骤3 - 命名为“n”的变量被初始化,它将保存要打印左星形图案的行数。

  • 步骤4 - 函数被调用后,生成的左三角星形图案将被打印到控制台。

示例

在这个例子中,左三角星形图案是使用递归打印的。

leftTriangle :: Int -> IO ()
leftTriangle n = if n > 0 then leftTriangle (n-1) >> putStrLn (replicate n '*') else return ()

main :: IO ()
main = do
  let n = 5
  leftTriangle n

输出

[1 of 1] Compiling Main             ( main.hs, main.o )
Linking main ...
*
**
***
****
*****

结论

左三角星形图案是由星号(*)排列成三角形形状的图案,左侧是最长的一侧。在Haskell中,我们可以使用`mapM_`,`replicate`函数和递归来实现它。

更新于:2023年3月28日

240 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.