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函数。

更新于:2023年4月6日

浏览量:119

开启您的职业生涯

通过完成课程获得认证

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