Haskell 程序打印菱形星号图案


在 Haskell 中,要打印菱形星号图案,我们将使用 mapM_、reverse、unlines 和 replicate 函数。在第一个示例中,我们将使用 (diamondStarPattern n = unlines $ topHalf ++ bottomHalf where topHalf = [replicate (n - i) ' ' ++ replicate ((2 * i) - 1) '*' | i <- [0..n]] and bottomHalf = reverse $ drop 0 topHalf) 函数,在第二个示例中,我们将使用 (diamondStarPattern n = mapM_ putStrLn $ bottomRows ++ topRows where topRows = [spaces i ++ stars (n - 2 * i) | i <- [0..n `div` 2]] and bottomRows = reverse [spaces i ++ stars (n - 2 * i) | i <- [1..n `div` 2]]) 函数。

算法

  • 步骤 1 − 使用 mapM_ 和 reverse 函数定义 diamondStarPattern 函数

  • 步骤 2 − 程序执行将从 main 函数开始。main() 函数控制整个程序。

  • 步骤 3 − 一旦函数被调用并传入参数,结果的菱形星号图案就会打印到控制台。

示例 1

在这个示例中,使用 unlines 和 replicate 函数打印菱形星号图案。

main = do
  let n = 3
  putStrLn $ diamondStarPattern n

diamondStarPattern :: Int -> String
diamondStarPattern n = unlines $ topHalf ++ bottomHalf
  where topHalf = [replicate (n - i) ' ' ++ replicate ((2 * i) - 1) '*' | i <- [0..n]]
        bottomHalf = reverse $ drop 0 topHalf

输出

  [1 of 1] Compiling Main             ( main.hs, main.o )
Linking main ...
   
  *
 ***
*****
*****
 ***
  * 

示例 2

在这个示例中,使用 mapM_ 和 reverse 函数打印菱形星号图案。

diamondStarPattern :: Int -> IO ()
diamondStarPattern n = mapM_ putStrLn $  bottomRows ++ topRows
  where
    topRows = [spaces i ++ stars (n - 2 * i) | i <- [0..n `div` 2]]
    bottomRows = reverse [spaces i ++ stars (n - 2 * i) | i <- [1..n `div` 2]]
    stars x = replicate x '*'
    spaces x = replicate x ' '

main = diamondStarPattern 7

输出

  [1 of 1] Compiling Main             ( main.hs, main.o )
Linking main ...
   *
  ***
 *****
*******
 *****
  ***
   *

结论

菱形星号图案是由星号 (*) 排列成菱形形状的图案。该图案由两部分组成 - 上三角形和下三角形。上三角形由一系列从中心逐渐缩短的线组成,直到它们在顶部汇聚成一个点。下三角形由一系列从中心逐渐加长的线组成,直到它们在底部达到最大宽度。这两个三角形由一行星号隔开。整体效果是一个带有星号图案的菱形。

更新于: 2023年3月28日

163 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告