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


在Haskell中,我們可以使用mapM、forM以及遞迴函式來建立一個簡單的直角三角形星號圖案。

什麼是直角三角形星號圖案?

直角三角形圖案是由一系列星號或其他字元排列成三角形形狀。對於直角三角形圖案,三角形的底邊是最長邊,與水平軸對齊,而其他兩條邊構成直角。三角形每一行的星號或字元數量隨著向上移動而減少,因此頂行只有一個星號或字元。

演算法

  • 步驟1 − 使用mapM_函式定義printTriangle函式

  • 步驟2 − 程式執行將從main函式開始。main()函式控制整個程式。它被寫成main = do。在main函式中,傳遞一個數字,該圖案將列印到該數字。

  • 步驟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_函式,或者可以使用遞迴函式。

更新於:2023年4月24日

213次瀏覽

開啟你的職業生涯

完成課程獲得認證

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