Haskell程式列印上三角星形圖案


本教程將幫助我們使用Haskell中的mapM函式、forM函式和unlines函式列印上三角星形圖案。

上三角星形圖案是用星號組成的三角形的圖形表示,如下所示。

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

它被稱為“上”三角星形圖案,因為三角形從頂部開始,每一行的星號數量隨著我們向下移動三角形而減少。

演算法

  • 步驟1 − 我們將從定義一個使用者自定義函式printStars函式開始。

  • 步驟2 − 程式執行將從main函式開始。main()函式控制整個程式。它被寫成main = do。在main函式中,傳遞一個數字,以此數字為上限列印上三角星形圖案。

  • 步驟3 − 名為“rowCount”的變數被初始化。它將儲存列印上三角星形圖案的整數上限。

  • 步驟4 − 函式呼叫後,使用‘putStrLn’語句將結果列印到控制檯。

示例1

在這個例子中,printStars函式接收一個整數n作為輸入,並在單行中列印n個星號。printUpperTriangle函式接收一個整數n作為輸入,並呼叫printStars函式n次,每次都增加星號的數量。main函式接收一個整數輸入,並使用該輸入呼叫printUpperTriangle函式。

module Main where

printStars :: Int -> IO ()
printStars n = putStrLn (take n (cycle "*"))

printUpperTriangle :: Int -> IO ()
printUpperTriangle n = mapM_ printStars [1..n]

main :: IO ()
main = do
   let rowCount = 5
   printUpperTriangle rowCount

輸出

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

示例2

在這個例子中,使用mapM_和replicate函式定義函式來列印上三角星形圖案。

module Main where

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

main :: IO ()
main = do
   let rowCount = 5
   printUpperTriangle rowCount

輸出

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

示例3

在這個例子中,匯入了Control.Monad模組,該模組提供了printUpperTriangle函式中使用的forM_函式。printStars函式接收一個Int引數n,並使用putStrLn函式列印一行n個星號。printUpperTriangle函式接收一個Int引數n,並使用forM_函式呼叫printStars函式n次,每次都增加星號的數量。

import Control.Monad

printStars :: Int -> IO ()
printStars n = putStrLn (take n (cycle "*"))

printUpperTriangle :: Int -> IO ()
printUpperTriangle n = forM_ [1..n] (\i -> printStars i)

main :: IO ()
main = do
   let rowCount = 5
   printUpperTriangle rowCount

輸出

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

示例4

在這個方法中,generateRows函式用於生成一個字串列表,其中每個字串代表一行星號。unlines函式用於將字串連線成一個字串,並在每個字串之間插入換行符。

module Main where

generateRows :: Int -> [String]
generateRows n = [replicate i '*' | i <- [1..n]]

printUpperTriangle :: Int -> IO ()
printUpperTriangle n = putStr (unlines (generateRows n))

main :: IO ()
main = do
   let rowCount = 5
   printUpperTriangle rowCount

輸出

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

結論

在Haskell中,要列印上三角星形圖案,我們可以使用MapM_、forM_或unlines函式。

更新於:2023年4月6日

瀏覽量:119

開啟您的職業生涯

透過完成課程獲得認證

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