Haskell程式列印金字塔星形圖案
在Haskell中,我們可以使用mapM和ForM函式來列印金字塔形狀的星形圖案。金字塔星形圖案是星形或其他符號以金字塔形狀排列的設計或佈局。它是透過列印多行星形或符號來建立的,從頂部開始向下移動。每一行比前一行多一個符號,從而產生三角形的視覺效果。該圖案通常是對稱的,每行中的星形或符號數量等於行號,並且每行的中間垂直對齊。
演算法
步驟1 − 使用mapM_函式定義金字塔函式
步驟2 − 程式執行將從main函式開始。main()函式控制整個程式。它被寫成main = do。在main函式中,傳遞一個數字,該數字表示要列印金字塔星形圖案的範圍。
步驟3 − 初始化名為“n”的變數。它將儲存要列印金字塔星形圖案的整數範圍。
步驟4 − 函式呼叫後,使用'putStrLn'語句將結果列印到控制檯。
在這個例子中,定義了一個名為pyramid的函式,它接受一個整數n作為引數,並使用mapM_列印buildPyramid函式生成的列表中的每個元素。buildPyramid函式接受n作為引數,並生成一個表示金字塔圖案的字串列表。它使用列表推導式為金字塔的每一行生成一個字串,方法是連線兩個字串。
示例1
在這個例子中,使用mapM_函式定義了pyramid函式來列印金字塔星形圖案。
pyramid :: Int -> IO ()
pyramid n = mapM_ putStrLn $ buildPyramid n
where
buildPyramid :: Int -> [String]
buildPyramid n = [replicate (n-i) ' ' ++ replicate (2*i-1) '*' | i <- [1..n]]
main :: IO ()
main = do
let n = 5
pyramid n
輸出
* *** ***** ******* *********
示例2
在這個例子中,定義了一個名為pyramid的函式,它接受一個整數n作為引數,並使用forM_函式迭代範圍[1..n]。傳遞給forM_的函式是一個匿名函式(也稱為lambda函式),它接受一個引數i,並使用putStrLn列印透過連線兩個字串生成的字串。
pyramid :: Int -> IO ()
pyramid n = mapM_ putStrLn $ buildPyramid n
where
buildPyramid :: Int -> [String]
buildPyramid n = [replicate (n-i) ' ' ++ replicate (2*i-1) '*' | i <- [1..n]]
main :: IO ()
main = do
let n = 5
pyramid n
輸出
* *** ***** ******* *********
示例3
在這種方法中,定義了一個名為printTriangle的函式,它接受兩個引數:一個整數n表示行數,一個整數i表示當前行。該函式檢查i是否大於n,如果是,則該函式在不執行任何操作的情況下返回。如果i不大於n,則該函式使用putStrLn函式列印一行i個星號,然後呼叫自身並將i加1。這種遞迴方法持續進行,直到i大於n,此時函式返回。
drawLine :: Int -> Int -> IO () drawLine n k = do let spaces = replicate (n - k) ' ' let stars = replicate (2 * k - 1) '*' putStrLn (spaces ++ stars) drawPyramid :: Int -> IO () drawPyramid n = mapM_ (drawLine n) [1..n] main :: IO () main = do let n = 5 drawPyramid n
輸出
* *** ***** ******* *********
結論
在Haskell中,要列印金字塔星形圖案,我們可以使用MapM_或forM_函式,或者可以使用遞迴函式。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP