Haskell 程序打印直角三角星形图案

haskellserver side programmingprogramming更新于 2025/5/25 13:52:17

在 haskell 中,我们可以使用 mapM、forM 以及递归函数来创建一个简单的直角三角星形图案。

什么是直角三角星形图案?

直角三角图案是一系列排列成三角形的星号或其他字符。在直角三角图案的情况下,三角形的底边是最长的边,与水平轴对齐,而其他两条边形成直角。三角形中每行的星号或字符数随着三角形向上移动而减少,因此顶行仅包含一个星号或字符。

算法

  • 步骤 1 - 使用 mapM_ 函数定义 printTriangle 函数

  • 步骤 2 - 程序执行将从主函数开始。main() 函数完全控制程序。它写为 main = do。在主函数中,将传递一个数字,以便打印模式。

  • 步骤 3 - 正在初始化名为"n"的变量。它将保存要打印模式的整数。

  • 步骤 4 - 调用函数后,使用"putStrLn"语句将结果打印到控制台。

示例 1

在此示例中,定义了一个 printTriangle 函数,该函数以整数 n 作为输入并生成一个字符串列表,每个字符串包含一定数量的星号。mapM_ 函数用于将 putStrLn 函数应用于列表中的每个字符串,从而有效地打印三角形的每一条线。

module Main where

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

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

输出

*
**
***
****
*****

示例 2

在此示例中,Control.Monad 模块中的 forM_ 函数用于迭代从 1 到 n 的整数范围,并为每个迭代打印一行星号。putStrLn 函数用于打印每一行,而 replicate 函数用于生成一个包含 i 个星号的字符串,其中 i 是当前迭代次数。

import Control.Monad

printTriangle :: Int -> IO ()
printTriangle n = forM_ [1..n] $ \i -> putStrLn (replicate i '*')

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

输出

*
**
***
****
*****

示例 3

在此示例中,定义了一个 printTriangle 函数,该函数接受两个参数:一个表示行数的整数 n 和一个表示当前行的整数 i。该函数检查 i 是否大于 n,如果是,则函数返回而不执行任何操作。如果 i 不大于 n,则该函数使用 putStrLn 函数打印一行 i 个星号,然后调用自身并将 i 增加 1。此递归方法持续到 i 大于 n,此时函数返回。

printTriangle :: Int -> Int -> IO ()
printTriangle n i
   | i > n     = return ()
   | otherwise = do
      putStrLn (replicate i '*')
      printTriangle n (i+1)

main :: IO ()
main = do
   let n = 5
   printTriangle n 1

输出

*
**
***
****
*****

结论

在 Haskell 中,要打印直角三角形图案,我们可以使用 MapM_ 或 forM_ 函数,或者我们可以使用递归函数。


相关文章