Haskell程式建立金字塔“&”圖案
在本教程中,我們將瞭解如何開發一個Haskell程式,該程式將使用mapM、forM和遞迴函式建立“&”的金字塔圖案。
金字塔“&”圖案是一種設計或排列“&”或其他符號以形成金字塔形狀的圖案,如下所示。
& &&& &&&&& &&&&&&& &&&&&&&&&
它是透過列印多行“&”或符號建立的,從頂部開始向下移動。每一行比上一行多一個符號,從而產生三角形的錯覺。該圖案通常是對稱的,每一行中的“&”或符號數量等於行號,並且每一行的中間垂直對齊。
演算法
步驟1 - 使用內部函式定義一個函式
步驟2 - 程式執行將從主函式開始。main() 函式控制整個程式。它寫成 main = do。在主函式中,傳遞一個數字,將列印到該數字為止的金字塔“&”圖案。
步驟3 - 變數名為“n”。它將儲存要列印到該數字為止的金字塔星形圖案的整數。
步驟4 - 呼叫函式後,使用“putStrLn”語句將結果列印到控制檯。
示例1
在此示例中,定義了一個名為pyramid的函式,該函式以整數n作為引數,並使用mapM_列印buildPyramid函式生成的列表中的每個元素。buildPyramid函式以n作為引數,並生成一個表示金字塔“&”圖案的字串列表。它使用列表推導式為金字塔的每一行生成一個字串,方法是連線兩個字串。
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列印透過連線兩個字串生成的字串。
import Control.Monad pyramid :: Int -> IO () pyramid n = forM_ [1..n] $ \i -> putStrLn $ (replicate (n-i) ' ') ++ (replicate (2*i-1) '&') 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