Haskell 程序打印反向金字塔星形图案
Haskell 具有 mapM 和 ForM 等内部函数,可以打印反向金字塔星形图案。
反向金字塔星形图案是由星号(星形)组成的图案,排列成倒置的金字塔形状。
算法
步骤 1 − 程序执行将从主函数开始。main() 函数控制整个程序。它被写成 main = do。在主函数中,传递一个数字,用于指定要打印的反向金字塔星形图案的高度。主函数定义了 mapM_ 函数,如下所示:
步骤 2 − 初始化名为“n”的变量。它将保存要打印的反向金字塔星形图案的高度(整数)。
步骤 3 − 函数调用完成后,使用 'putStrLn' 语句将结果打印到控制台。
示例 1
在这个示例中,定义了一个主函数,它使用 mapM_ 函数将 putStrLn 操作应用于列表 [replicate i ' ' ++ replicateicate (2 * (n - i) - 1) '*' | i <- [0..n - 1]] 中的每个元素。replicate 函数用于创建空格和星号的字符串,而 ++ 运算符用于连接字符串。
module Main where main :: IO () main = do let n = 5 mapM_ putStrLn [replicate i ' ' ++ replicate (2 * (n - i) - 1) '*' | i <- [0..n - 1]]
输出
*********
*******
*****
***
*
示例 2
在这种方法中,定义了一个主函数,它使用 Control.Monad 模块中的 forM_ 函数迭代列表 [n, n-1..1]。传递给 forM_ 的函数以整数 i 作为参数,并通过连接两次对 replicate 函数的调用结果来创建一个字符串。第一次调用 replicate 创建一个包含 n - i 个空格的字符串,而第二次调用创建包含 2 * i - 1 个星号的字符串。然后,使用 putStrLn 函数将生成的字符串打印到控制台。
module Main where
import Control.Monad
main :: IO ()
main = do
let n = 5
forM_ [n, n-1..1] $ \i -> do
putStrLn $ replicate (n - i) ' ' ++ replicate (2 * i - 1) '*'
输出
*********
*******
*****
***
*
示例 3
在这个示例中,定义了一个函数 printStars,它接受两个参数 n 和 i。如果 i 等于 0,则函数返回 ()。否则,函数首先通过连接两次对 replicate 函数的调用结果来创建一个空格和星号的字符串,然后使用 putStrLn 将字符串打印到控制台。最后,函数递归调用自身,并将 i 减 1,直到 i 等于 0。
module Main where
printStars :: Int -> Int -> IO ()
printStars n i
| i == 0 = return ()
| otherwise = do
putStrLn $ replicate (n - i) ' ' ++ replicate (2 * i - 1) '*'
printStars n (i - 1)
main :: IO ()
main = do
let n = 5
printStars n n
输出
*********
*******
*****
***
*
结论
在 Haskell 中,要打印反向金字塔星形图案,我们可以使用 MapM_ 或 forM_ 函数,或者可以使用递归函数。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP