Haskell 程式列印反向金字塔星形圖案
Haskell 具有 mapM 和 ForM 等內部函式,可以列印反向金字塔星形圖案。
反向金字塔星形圖案是由星號(星形)組成的圖案,排列成倒置的金字塔形狀。
演算法
步驟 1 − 程式執行將從主函式開始。main() 函式控制整個程式。它被寫成 main = do。在主函式中,傳遞一個數字,用於指定要列印的反向金字塔星形圖案的高度。主函式定義了 mapM_ 函式,如下所示:
步驟 2 − 初始化名為“n”的變數。它將儲存要列印的反向金字塔星形圖案的高度(整數)。
步驟 3 − 函式呼叫完成後,使用 'putStrLn' 語句將結果列印到控制檯。
示例 1
在這個示例中,定義了一個主函式,它使用 mapM_ 函式將 putStrLn 操作應用於列表 [replicate i ' ' ++ replicateicate (2 * (n - i) - 1) '*' | i <- [0..n - 1]] 中的每個元素。replicate 函式用於建立空格和星號的字串,而 ++ 運算子用於連線字串。
module Main where main :: IO () main = do let n = 5 mapM_ putStrLn [replicate i ' ' ++ replicate (2 * (n - i) - 1) '*' | i <- [0..n - 1]]
輸出
*********
*******
*****
***
*
示例 2
在這種方法中,定義了一個主函式,它使用 Control.Monad 模組中的 forM_ 函式迭代列表 [n, n-1..1]。傳遞給 forM_ 的函式以整數 i 作為引數,並透過連線兩次對 replicate 函式的呼叫結果來建立一個字串。第一次呼叫 replicate 建立一個包含 n - i 個空格的字串,而第二次呼叫建立包含 2 * i - 1 個星號的字串。然後,使用 putStrLn 函式將生成的字串列印到控制檯。
module Main where
import Control.Monad
main :: IO ()
main = do
let n = 5
forM_ [n, n-1..1] $ \i -> do
putStrLn $ replicate (n - i) ' ' ++ replicate (2 * i - 1) '*'
輸出
*********
*******
*****
***
*
示例 3
在這個示例中,定義了一個函式 printStars,它接受兩個引數 n 和 i。如果 i 等於 0,則函式返回 ()。否則,函式首先透過連線兩次對 replicate 函式的呼叫結果來建立一個空格和星號的字串,然後使用 putStrLn 將字串列印到控制檯。最後,函式遞迴呼叫自身,並將 i 減 1,直到 i 等於 0。
module Main where
printStars :: Int -> Int -> IO ()
printStars n i
| i == 0 = return ()
| otherwise = do
putStrLn $ replicate (n - i) ' ' ++ replicate (2 * i - 1) '*'
printStars n (i - 1)
main :: IO ()
main = do
let n = 5
printStars n n
輸出
*********
*******
*****
***
*
結論
在 Haskell 中,要列印反向金字塔星形圖案,我們可以使用 MapM_ 或 forM_ 函式,或者可以使用遞迴函式。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP