Haskell 程式列印向下三角形星號圖案
在 Haskell 中,要列印向下三角形星號圖案,我們將使用 mapM_、replicate 和 unlines 函式。在第一個示例中,我們將使用在 main 函式下定義的 ( mapM_ putStrLn $ map (concat . flip replicate "*") rows) 函式,在第二個示例中,我們將使用使用者定義的 (printDownwardTriangle n = mapM_ putStrLn [replicate i '*' | i <- [n,n-1..1]]) 函式。在第三個示例中,我們將使用 (downwardTriangle n = unlines $ reverse [replicate i '*' | i <- [1..n]]) 函式。
方法 1:使用 flip replicate 函式列印向下三角形星號圖案
在這種方法中,定義了一個整數列表“rows”,從 n 倒數到 1,然後使用“map”和“putStrLn”的組合來列印列表中每個整數的星號字串。
演算法
步驟 1 − 程式執行將從 main 函式開始。main() 函式控制整個程式。它寫成 main = do。
步驟 2 − 命名為“n”的變數被初始化,它將儲存要列印向下三角形星號圖案的行數的值。
步驟 3 − mapM_ 函式用於列印生成的向下三角形星號圖案以及 flip replicate 函式,如 mapM_ putStrLn $ map (concat . flip replicate "*") rows。
示例
在這個例子中,使用在 main 函式下定義的 mapM_ 和 flip replicate 函式列印向下三角形星號圖案。
main :: IO () main = do let n = 5 let rows = reverse [1..n] mapM_ putStrLn $ map (concat . flip replicate "*") rows
輸出
[1 of 1] Compiling Main ( main.hs, main.o ) Linking main ... ***** **** *** ** *
方法 2:使用 mapM_ 和 replicate 函式列印向下三角形星號圖案
在這種方法中,printDownwardTriangle 函式以整數 n 作為輸入,並使用列表推導式列印向下三角形星號圖案。列表推導式生成一個字串列表,其中每個字串都是三角形的一行,由“*”字元組成。每行中“*”字元的數量由整數列表 [n,n-1..1] 確定,該列表從 n 倒數到 1。replicate 函式用於為每一行建立適當長度的“*”字元字串。最後,mapM_ putStrLn 用於在單獨的行上列印每一行。
演算法
步驟 1 − 程式執行將從 main 函式開始。main() 函式控制整個程式。它寫成 main = do。
步驟 2 − 命名為“n”的變數被初始化,它將儲存要列印向下三角形星號圖案的行數的值。
步驟 3 − 使用 mapM_ 和 replicate 定義使用者定義函式
步驟 4 − 一旦函式被呼叫,生成的向下星號圖案就會列印到控制檯。
示例 1
在這個例子中,printDownwardTriangle 以 Int 作為其引數,並返回一個列印向下三角形圖案的 IO 操作。該圖案使用列表推導式生成,該列表推導式建立了一個字串列表,每個字串包含三角形每一行所需的星號數量。然後,mapM_ 函式在新的行上列印列表中的每個字串。
main = do let n = 5 printDownwardTriangle n printDownwardTriangle :: Int -> IO () printDownwardTriangle n = mapM_ putStrLn [replicate i '*' | i <- [n,n-1..1]]
輸出
[1 of 1] Compiling Main ( main.hs, main.o ) Linking main ... ***** **** *** ** *
示例 2
在這個例子中,printDownwardTriangle 以 Int 作為其引數,並返回一個列印向下三角形圖案的 IO 操作。該圖案使用列表推導式生成,該列表推導式建立了一個字串列表,每個字串包含三角形每一行所需的星號數量。然後,mapM_ 函式在新的行上列印列表中的每個字串。
main = do let n = 5 putStrLn $ downwardTriangle n downwardTriangle :: Int -> String downwardTriangle n = unlines $ reverse [replicate i '*' | i <- [1..n]]
輸出
[1 of 1] Compiling Main ( main.hs, main.o ) Linking main ... ***** **** *** ** *
結論
向下三角形星號圖案是一系列星號行,每一行比前一行少一個星號。這些行排列成一個向下指的三角形形狀,第一行星號最多,最後一行只有一個星號。