Haskell程序打印金字塔星形图案
在Haskell中,我们可以使用mapM和ForM函数来打印金字塔形状的星形图案。金字塔星形图案是星形或其他符号以金字塔形状排列的设计或布局。它是通过打印多行星形或符号来创建的,从顶部开始向下移动。每一行比前一行多一个符号,从而产生三角形的视觉效果。该图案通常是对称的,每行中的星形或符号数量等于行号,并且每行的中间垂直对齐。
算法
步骤1 − 使用mapM_函数定义金字塔函数
步骤2 − 程序执行将从main函数开始。main()函数控制整个程序。它被写成main = do。在main函数中,传递一个数字,该数字表示要打印金字塔星形图案的范围。
步骤3 − 初始化名为“n”的变量。它将保存要打印金字塔星形图案的整数范围。
步骤4 − 函数调用后,使用'putStrLn'语句将结果打印到控制台。
在这个例子中,定义了一个名为pyramid的函数,它接受一个整数n作为参数,并使用mapM_打印buildPyramid函数生成的列表中的每个元素。buildPyramid函数接受n作为参数,并生成一个表示金字塔图案的字符串列表。它使用列表推导式为金字塔的每一行生成一个字符串,方法是连接两个字符串。
示例1
在这个例子中,使用mapM_函数定义了pyramid函数来打印金字塔星形图案。
pyramid :: Int -> IO ()
pyramid n = mapM_ putStrLn $ buildPyramid n
where
buildPyramid :: Int -> [String]
buildPyramid n = [replicate (n-i) ' ' ++ replicate (2*i-1) '*' | i <- [1..n]]
main :: IO ()
main = do
let n = 5
pyramid n
输出
* *** ***** ******* *********
示例2
在这个例子中,定义了一个名为pyramid的函数,它接受一个整数n作为参数,并使用forM_函数迭代范围[1..n]。传递给forM_的函数是一个匿名函数(也称为lambda函数),它接受一个参数i,并使用putStrLn打印通过连接两个字符串生成的字符串。
pyramid :: Int -> IO ()
pyramid n = mapM_ putStrLn $ buildPyramid n
where
buildPyramid :: Int -> [String]
buildPyramid n = [replicate (n-i) ' ' ++ replicate (2*i-1) '*' | i <- [1..n]]
main :: IO ()
main = do
let n = 5
pyramid n
输出
* *** ***** ******* *********
示例3
在这种方法中,定义了一个名为printTriangle的函数,它接受两个参数:一个整数n表示行数,一个整数i表示当前行。该函数检查i是否大于n,如果是,则该函数在不执行任何操作的情况下返回。如果i不大于n,则该函数使用putStrLn函数打印一行i个星号,然后调用自身并将i加1。这种递归方法持续进行,直到i大于n,此时函数返回。
drawLine :: Int -> Int -> IO () drawLine n k = do let spaces = replicate (n - k) ' ' let stars = replicate (2 * k - 1) '*' putStrLn (spaces ++ stars) drawPyramid :: Int -> IO () drawPyramid n = mapM_ (drawLine n) [1..n] main :: IO () main = do let n = 5 drawPyramid n
输出
* *** ***** ******* *********
结论
在Haskell中,要打印金字塔星形图案,我们可以使用MapM_或forM_函数,或者可以使用递归函数。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP