Haskell 程式列印向下三角形星號圖案


在 Haskell 中,要列印向下三角形星號圖案,我們將使用 mapM_、replicate 和 unlines 函式。在第一個示例中,我們將使用在 main 函式下定義的 ( mapM_ putStrLn $ map (concat . flip replicate "*") rows) 函式,在第二個示例中,我們將使用使用者定義的 (printDownwardTriangle n = mapM_ putStrLn [replicate i '*' | i <- [n,n-1..1]]) 函式。在第三個示例中,我們將使用 (downwardTriangle n = unlines $ reverse [replicate i '*' | i <- [1..n]]) 函式。

方法 1:使用 flip replicate 函式列印向下三角形星號圖案

在這種方法中,定義了一個整數列表“rows”,從 n 倒數到 1,然後使用“map”和“putStrLn”的組合來列印列表中每個整數的星號字串。

演算法

  • 步驟 1 − 程式執行將從 main 函式開始。main() 函式控制整個程式。它寫成 main = do。

  • 步驟 2 − 命名為“n”的變數被初始化,它將儲存要列印向下三角形星號圖案的行數的值。

  • 步驟 3 − mapM_ 函式用於列印生成的向下三角形星號圖案以及 flip replicate 函式,如 mapM_ putStrLn $ map (concat . flip replicate "*") rows。

示例

在這個例子中,使用在 main 函式下定義的 mapM_ 和 flip replicate 函式列印向下三角形星號圖案。

main :: IO ()
main = do
  let n = 5
  let rows = reverse [1..n]
  mapM_ putStrLn $ map (concat . flip replicate "*") rows

輸出

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

方法 2:使用 mapM_ 和 replicate 函式列印向下三角形星號圖案

在這種方法中,printDownwardTriangle 函式以整數 n 作為輸入,並使用列表推導式列印向下三角形星號圖案。列表推導式生成一個字串列表,其中每個字串都是三角形的一行,由“*”字元組成。每行中“*”字元的數量由整數列表 [n,n-1..1] 確定,該列表從 n 倒數到 1。replicate 函式用於為每一行建立適當長度的“*”字元字串。最後,mapM_ putStrLn 用於在單獨的行上列印每一行。

演算法

  • 步驟 1 − 程式執行將從 main 函式開始。main() 函式控制整個程式。它寫成 main = do。

  • 步驟 2 − 命名為“n”的變數被初始化,它將儲存要列印向下三角形星號圖案的行數的值。

  • 步驟 3 − 使用 mapM_ 和 replicate 定義使用者定義函式

  • 步驟 4 − 一旦函式被呼叫,生成的向下星號圖案就會列印到控制檯。

示例 1

在這個例子中,printDownwardTriangle 以 Int 作為其引數,並返回一個列印向下三角形圖案的 IO 操作。該圖案使用列表推導式生成,該列表推導式建立了一個字串列表,每個字串包含三角形每一行所需的星號數量。然後,mapM_ 函式在新的行上列印列表中的每個字串。

main = do
  let n = 5
  printDownwardTriangle n

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

輸出

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

示例 2

在這個例子中,printDownwardTriangle 以 Int 作為其引數,並返回一個列印向下三角形圖案的 IO 操作。該圖案使用列表推導式生成,該列表推導式建立了一個字串列表,每個字串包含三角形每一行所需的星號數量。然後,mapM_ 函式在新的行上列印列表中的每個字串。

main = do
  let n = 5
  putStrLn $ downwardTriangle n

downwardTriangle :: Int -> String
downwardTriangle n = unlines $ reverse [replicate i '*' | i <- [1..n]]

輸出

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

結論

向下三角形星號圖案是一系列星號行,每一行比前一行少一個星號。這些行排列成一個向下指的三角形形狀,第一行星號最多,最後一行只有一個星號。

更新於: 2023年3月28日

132 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告