Haskell程式列印倒置星型圖案


在Haskell中,要列印倒置星型圖案,我們將使用`mapM_`、`reverse`、`unlines`和`replicate`函式。在第一個例子中,我們將使用`(invertedStarPattern n = mapM_ putStrLn (reverse [replicate i '*' | i <- [1..n]]))`函式,在第二個例子中,我們將使用`invertedTriangle n = unlines $ reverse [replicate i '*' | i <- [1..n]]`函式。在第三個例子中,我們將使用`(mapM_ putStrLn $ map (concat . flip replicate "*") rows)`函式。

方法一:使用`mapM_`、`reverse`和`replicate`函式列印倒置星型圖案。

在這種方法中,圖案是使用列表推導生成的,該推導建立一個字串列表,其中每個字串都是倒置星型圖案的一行。`replicate`函式用於為範圍n到1中的每個i建立一個長度為i的'*'字元的字串。

演算法

  • 步驟1 − `invertedStarPattern`使用`mapM_`、`reverse`和`replicate`函式定義為:`invertedStarPattern n = mapM_ putStrLn (reverse [replicate i '*' | i <- [1..n]])`。

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

  • 步驟3 − 初始化名為'n'的變數,它將儲存要列印倒置星型圖案的行數。

  • 步驟4 − 呼叫函式後,將生成的倒置星型圖案列印到控制檯。

示例

在這個例子中,倒置星型圖案是使用`mapM_`、`reverse`和`replicate`函式列印的。

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

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

輸出

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

方法二:使用`unlines`函式列印倒置三角形星型圖案

在這種方法中,`invertedTriangle`函式接受一個整數n作為輸入,並返回一個表示倒置三角形星型圖案的字串。表示式`replicate i '*'`建立一個由i個星號組成的字串。列表推導`[replicate i '*' | i <- [1..n]]`生成一個字串列表,其中每個字串都是星號序列。每個字串的長度從1增加到n。`reverse`函式應用於步驟4中生成的列表,以反轉列表中元素的順序。然後,`unlines`函式應用於步驟5中生成的列表,以將列表中的元素連線成一個由換行符分隔的單個字串。

演算法

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

  • 步驟2 − 初始化名為'n'的變數,它將儲存要列印倒置三角形星型圖案的行數。

  • 步驟3 − `invertedTriangle`函式使用`unlines`和`reverse`函式定義為:`invertedTriangle n = unlines $ reverse [replicate i '*' | i <- [1..n]]`。

  • 步驟4 − 呼叫函式後,將生成的倒置星型圖案列印到控制檯。

示例

在這個例子中,`invertedTriangle`以Int作為引數,並返回一個列印倒置三角形圖案的IO操作。該圖案使用列表推導生成,該推導建立一個字串列表,其中包含三角形每一行適當數量的星號。然後,`mapM_`函式在每一行列印每個字串。

main = do
  let n = 5
  putStrLn $ invertedTriangle n

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

輸出

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

方法三:使用`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 ...
*****
****
***
**
*

結論

倒置星形三角形圖案是由星號(*)列印成倒三角形的圖案。三角形的每一行都比上一行多一個星號,頂行只有一個星號。

更新於:2023年3月28日

瀏覽量:257

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.