Haskell程式列印星形帕斯卡三角形
在Haskell中,我們可以使用mapM函式和forM函式來列印星形帕斯卡三角形。
星形帕斯卡三角形是傳統帕斯卡三角形的一種變體,它使用星號(或星形)而不是數字來形成三角形圖案,如下所示。
* * * * * * * * *
帕斯卡三角形是一個三角形的數字陣列,其中三角形中的每個數字都是其上方兩個數字之和。在星形帕斯卡三角形中,每個數字都用一個星號表示,因此三角形由星號而不是數字組成。
演算法
步驟1 − 我們將從定義一個使用者自定義函式printLine開始
步驟2 − 程式執行將從main函式開始。main()函式控制整個程式。它寫成main = do。在main函式中,傳遞一個數字,指定要列印的星形帕斯卡三角形圖案的行數。
步驟3 − 初始化名為“lines”的變數。它將儲存要列印的星形帕斯卡三角形圖案的行數。
步驟4 − 呼叫函式後,使用‘putStrLn’語句將結果列印到控制檯。
示例1
在這個示例中,printLine函式接收一個整數列表line和空格數spaces,它列印spaces個空格,然後列印line的元素,要麼是星號,要麼是空格。nextRow函式使用上一行生成星形帕斯卡三角形的下一行。printTriangle函式將printLine函式對映到一個整數列表[1..n]上,其中n是使用者指定的行數。傳遞給printLine函式的引數n - x確保空格數隨著每行的增加而減少,而take x [1,1..]表示式生成每行的元素列表。
module Main where
nextRow :: [Int] -> [Int]
nextRow line = zipWith (+) (0 : line) (line ++ [0])
generateTriangle :: [[Int]]
generateTriangle = iterate nextRow [1]
printTriangle :: Int -> IO ()
printTriangle n = mapM_ printLine (take n generateTriangle)
where
printLine line = putStrLn (replicate (n - length line) ' ' ++ unwords (map (\x -> if x == 1 then "*" else " ") line))
main :: IO ()
main = do
let lines = 5
printTriangle lines
輸出
* * * * * * * * *
示例2
在這個示例中,使用mapM_和replicate函式定義函式來列印星形帕斯卡三角形圖案。
module Main where
nextRow :: [Int] -> [Int]
nextRow line = zipWith (+) (0 : line) (line ++ [0])
generateTriangle :: [[Int]]
generateTriangle = iterate nextRow [1]
printTriangle :: Int -> IO ()
printTriangle n = mapM_ printLine (take n generateTriangle)
where
printLine line = putStrLn (replicate (n - length line) ' ' ++ unwords (map (\x -> if x == 1 then "*" else " ") line))
main :: IO ()
main = do
let lines = 5
printTriangle lines
輸出
* * * * * * * * *
示例3
在這個示例中,使用forM_函式來列印三角形。forM_函式允許我們對列表中的每個元素執行一個操作,並丟棄該操作的結果。這種方法對於列印三角形很有用,因為它允許我們輕鬆地遍歷每一行和每一行中的每個元素,根據需要列印空格和星號。
module Main where import Control.Monad nextRow :: [Int] -> [Int] nextRow xs = zipWith (+) (0 : xs) (xs ++ [0]) generateTriangle :: Int -> [[Int]] generateTriangle n = take n (iterate nextRow [1]) printTriangle :: Int -> IO () printTriangle n = forM_ (generateTriangle n) $ \row -> do forM_ [1..n - length row] $ \_ -> putStr " " forM_ row $ \x -> if x == 1 then putStr "*" else putStr " " putStrLn " " main :: IO () main = do let lines = 5 printTriangle lines
輸出
* * * * * * * * *
結論
在Haskell中,要列印星形帕斯卡三角形圖案,我們可以使用MapM_、replicate或forM_函式。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP