Haskell程序打印上三角星形图案
本教程将帮助我们使用Haskell中的mapM函数、forM函数和unlines函数打印上三角星形图案。
上三角星形图案是用星号组成的三角形的图形表示,如下所示。
* ** *** **** *****
它被称为“上”三角星形图案,因为三角形从顶部开始,每一行的星号数量随着我们向下移动三角形而减少。
算法
步骤1 − 我们将从定义一个用户自定义函数printStars函数开始。
步骤2 − 程序执行将从main函数开始。main()函数控制整个程序。它被写成main = do。在main函数中,传递一个数字,以此数字为上限打印上三角星形图案。
步骤3 − 名为“rowCount”的变量被初始化。它将保存打印上三角星形图案的整数上限。
步骤4 − 函数调用后,使用‘putStrLn’语句将结果打印到控制台。
示例1
在这个例子中,printStars函数接收一个整数n作为输入,并在单行中打印n个星号。printUpperTriangle函数接收一个整数n作为输入,并调用printStars函数n次,每次都增加星号的数量。main函数接收一个整数输入,并使用该输入调用printUpperTriangle函数。
module Main where printStars :: Int -> IO () printStars n = putStrLn (take n (cycle "*")) printUpperTriangle :: Int -> IO () printUpperTriangle n = mapM_ printStars [1..n] main :: IO () main = do let rowCount = 5 printUpperTriangle rowCount
输出
* ** *** **** *****
示例2
在这个例子中,使用mapM_和replicate函数定义函数来打印上三角星形图案。
module Main where printUpperTriangle :: Int -> IO () printUpperTriangle n = mapM_ putStrLn [replicate i '*' | i <- [1..n]] main :: IO () main = do let rowCount = 5 printUpperTriangle rowCount
输出
* ** *** **** *****
示例3
在这个例子中,导入了Control.Monad模块,该模块提供了printUpperTriangle函数中使用的forM_函数。printStars函数接收一个Int参数n,并使用putStrLn函数打印一行n个星号。printUpperTriangle函数接收一个Int参数n,并使用forM_函数调用printStars函数n次,每次都增加星号的数量。
import Control.Monad printStars :: Int -> IO () printStars n = putStrLn (take n (cycle "*")) printUpperTriangle :: Int -> IO () printUpperTriangle n = forM_ [1..n] (\i -> printStars i) main :: IO () main = do let rowCount = 5 printUpperTriangle rowCount
输出
* ** *** **** *****
示例4
在这个方法中,generateRows函数用于生成一个字符串列表,其中每个字符串代表一行星号。unlines函数用于将字符串连接成一个字符串,并在每个字符串之间插入换行符。
module Main where generateRows :: Int -> [String] generateRows n = [replicate i '*' | i <- [1..n]] printUpperTriangle :: Int -> IO () printUpperTriangle n = putStr (unlines (generateRows n)) main :: IO () main = do let rowCount = 5 printUpperTriangle rowCount
输出
* ** *** **** *****
结论
在Haskell中,要打印上三角星形图案,我们可以使用MapM_、forM_或unlines函数。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP