Haskell程序打印倒置星型图案


在Haskell中,要打印倒置星型图案,我们将使用`mapM_`、`reverse`、`unlines`和`replicate`函数。在第一个例子中,我们将使用`(invertedStarPattern n = mapM_ putStrLn (reverse [replicate i '*' | i <- [1..n]]))`函数,在第二个例子中,我们将使用`invertedTriangle n = unlines $ reverse [replicate i '*' | i <- [1..n]]`函数。在第三个例子中,我们将使用`(mapM_ putStrLn $ map (concat . flip replicate "*") rows)`函数。

方法一:使用`mapM_`、`reverse`和`replicate`函数打印倒置星型图案。

在这种方法中,图案是使用列表推导生成的,该推导创建一个字符串列表,其中每个字符串都是倒置星型图案的一行。`replicate`函数用于为范围n到1中的每个i创建一个长度为i的'*'字符的字符串。

算法

  • 步骤1 − `invertedStarPattern`使用`mapM_`、`reverse`和`replicate`函数定义为:`invertedStarPattern n = mapM_ putStrLn (reverse [replicate i '*' | i <- [1..n]])`。

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

  • 步骤3 − 初始化名为'n'的变量,它将保存要打印倒置星型图案的行数。

  • 步骤4 − 调用函数后,将生成的倒置星型图案打印到控制台。

示例

在这个例子中,倒置星型图案是使用`mapM_`、`reverse`和`replicate`函数打印的。

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

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

输出

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

方法二:使用`unlines`函数打印倒置三角形星型图案

在这种方法中,`invertedTriangle`函数接受一个整数n作为输入,并返回一个表示倒置三角形星型图案的字符串。表达式`replicate i '*'`创建一个由i个星号组成的字符串。列表推导`[replicate i '*' | i <- [1..n]]`生成一个字符串列表,其中每个字符串都是星号序列。每个字符串的长度从1增加到n。`reverse`函数应用于步骤4中生成的列表,以反转列表中元素的顺序。然后,`unlines`函数应用于步骤5中生成的列表,以将列表中的元素连接成一个由换行符分隔的单个字符串。

算法

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

  • 步骤2 − 初始化名为'n'的变量,它将保存要打印倒置三角形星型图案的行数。

  • 步骤3 − `invertedTriangle`函数使用`unlines`和`reverse`函数定义为:`invertedTriangle n = unlines $ reverse [replicate i '*' | i <- [1..n]]`。

  • 步骤4 − 调用函数后,将生成的倒置星型图案打印到控制台。

示例

在这个例子中,`invertedTriangle`以Int作为参数,并返回一个打印倒置三角形图案的IO操作。该图案使用列表推导生成,该推导创建一个字符串列表,其中包含三角形每一行适当数量的星号。然后,`mapM_`函数在每一行打印每个字符串。

main = do
  let n = 5
  putStrLn $ invertedTriangle n

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

输出

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

方法三:使用`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 ...
*****
****
***
**
*

结论

倒置星形三角形图案是由星号(*)打印成倒三角形的图案。三角形的每一行都比上一行多一个星号,顶行只有一个星号。

更新于:2023年3月28日

浏览量:257

开启你的职业生涯

完成课程获得认证

开始学习
广告