Haskell程序打印镜像上三角星形图案


在本文中,我们将学习如何开发一个Haskell程序,使用mapM函数和unlines函数打印镜像上三角星形图案。镜像上三角星形图案是由星号组成的图案,形成三角形形状,三角形的顶端朝上。

以下星形图案将使您更好地理解镜像上三角星形图案。

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

该图案被称为“镜像”,因为三角形的左右两侧是对称的,形成了镜像。

算法

  • 步骤1 − 我们将从定义一个用户自定义函数printSpaces开始。

  • 步骤2 − 程序执行将从main函数开始。main()函数控制整个程序。它被写成main = do。在main函数中,传递一个数字,表示要打印镜像上三角星形图案的高度。

  • 步骤3 − 变量“height”被初始化。它将保存要打印镜像上三角星形图案的整数高度。

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

示例1

在此示例中,定义了一个函数printMirrorUpperStarTriangle,它接收一个整数n表示三角形的高度,并打印该高度的镜像上三角星形图案。它通过使用mapM_函数迭代数字范围[1..n]来实现,对于每个数字,它打印适当数量的空格和星号以创建三角形图案。

module Main where

printSpaces :: Int -> IO ()
printSpaces n = putStr (replicate n ' ')

printStars :: Int -> IO ()
printStars n = putStrLn (replicate n '*')

printMirrorUpperStarTriangle :: Int -> IO ()
printMirrorUpperStarTriangle n = mapM_ (\x -> do
   printSpaces (n - x)
   printStars (2 * x - 1)
   ) [1..n]

main :: IO ()
main = do
   let height = 5
   printMirrorUpperStarTriangle height

输出

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

示例2

在此示例中,使用mapM_和replicate函数定义了该函数,以打印镜像上三角星形图案。

module Main where

printLine :: Int -> Int -> IO ()
printLine n x = putStrLn $ (replicate (n - x) ' ') ++ (replicate (2 * x - 1) '*')

printMirrorUpperStarTriangle :: Int -> IO ()
printMirrorUpperStarTriangle n = mapM_ (printLine n) [1..n]

main :: IO ()
main = do
   let height = 5
   printMirrorUpperStarTriangle height

输出

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

示例3

在此示例中,定义了一个递归函数printMirrorUpperStarTriangle,它接收两个参数:n和x。n表示三角形的高度,x表示当前行。

module Main where

printSpaces :: Int -> IO ()
printSpaces n = putStr (replicate n ' ')

printStars :: Int -> IO ()
printStars n = putStrLn (replicate n '*')

printMirrorUpperStarTriangle :: Int -> Int -> IO ()
printMirrorUpperStarTriangle n x
   | x > n     = return ()
   | otherwise = do
      printSpaces (n - x)
      printStars (2 * x - 1)
      printMirrorUpperStarTriangle n (x + 1)

main :: IO ()
main = do
   let height = 5
   printMirrorUpperStarTriangle height 1

输出

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

结论

在Haskell中,要打印上三角星形图案,我们可以使用MapM_、replicate或递归函数。

更新于: 2023年4月6日

135 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.