Haskell 程序打印向下三角形星号图案


在 Haskell 中,要打印向下三角形星号图案,我们将使用 mapM_、replicate 和 unlines 函数。在第一个示例中,我们将使用在 main 函数下定义的 ( mapM_ putStrLn $ map (concat . flip replicate "*") rows) 函数,在第二个示例中,我们将使用用户定义的 (printDownwardTriangle n = mapM_ putStrLn [replicate i '*' | i <- [n,n-1..1]]) 函数。在第三个示例中,我们将使用 (downwardTriangle n = unlines $ reverse [replicate i '*' | i <- [1..n]]) 函数。

方法 1:使用 flip replicate 函数打印向下三角形星号图案

在这种方法中,定义了一个整数列表“rows”,从 n 倒数到 1,然后使用“map”和“putStrLn”的组合来打印列表中每个整数的星号字符串。

算法

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

  • 步骤 2 − 命名为“n”的变量被初始化,它将保存要打印向下三角形星号图案的行数的值。

  • 步骤 3 − mapM_ 函数用于打印生成的向下三角形星号图案以及 flip replicate 函数,如 mapM_ putStrLn $ map (concat . flip replicate "*") rows。

示例

在这个例子中,使用在 main 函数下定义的 mapM_ 和 flip replicate 函数打印向下三角形星号图案。

main :: IO ()
main = do
  let n = 5
  let rows = reverse [1..n]
  mapM_ putStrLn $ map (concat . flip replicate "*") rows

输出

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

方法 2:使用 mapM_ 和 replicate 函数打印向下三角形星号图案

在这种方法中,printDownwardTriangle 函数以整数 n 作为输入,并使用列表推导式打印向下三角形星号图案。列表推导式生成一个字符串列表,其中每个字符串都是三角形的一行,由“*”字符组成。每行中“*”字符的数量由整数列表 [n,n-1..1] 确定,该列表从 n 倒数到 1。replicate 函数用于为每一行创建适当长度的“*”字符字符串。最后,mapM_ putStrLn 用于在单独的行上打印每一行。

算法

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

  • 步骤 2 − 命名为“n”的变量被初始化,它将保存要打印向下三角形星号图案的行数的值。

  • 步骤 3 − 使用 mapM_ 和 replicate 定义用户定义函数

  • 步骤 4 − 一旦函数被调用,生成的向下星号图案就会打印到控制台。

示例 1

在这个例子中,printDownwardTriangle 以 Int 作为其参数,并返回一个打印向下三角形图案的 IO 操作。该图案使用列表推导式生成,该列表推导式创建了一个字符串列表,每个字符串包含三角形每一行所需的星号数量。然后,mapM_ 函数在新的行上打印列表中的每个字符串。

main = do
  let n = 5
  printDownwardTriangle n

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

输出

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

示例 2

在这个例子中,printDownwardTriangle 以 Int 作为其参数,并返回一个打印向下三角形图案的 IO 操作。该图案使用列表推导式生成,该列表推导式创建了一个字符串列表,每个字符串包含三角形每一行所需的星号数量。然后,mapM_ 函数在新的行上打印列表中的每个字符串。

main = do
  let n = 5
  putStrLn $ downwardTriangle n

downwardTriangle :: Int -> String
downwardTriangle n = unlines $ reverse [replicate i '*' | i <- [1..n]]

输出

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

结论

向下三角形星号图案是一系列星号行,每一行比前一行少一个星号。这些行排列成一个向下指的三角形形状,第一行星号最多,最后一行只有一个星号。

更新于: 2023年3月28日

132 次查看

开启你的 职业生涯

通过完成课程获得认证

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