Haskell程式列印直角三角形星號圖案
在Haskell中,我們可以使用mapM、forM以及遞迴函式來建立一個簡單的直角三角形星號圖案。
什麼是直角三角形星號圖案?
直角三角形圖案是由一系列星號或其他字元排列成三角形形狀。對於直角三角形圖案,三角形的底邊是最長邊,與水平軸對齊,而其他兩條邊構成直角。三角形每一行的星號或字元數量隨著向上移動而減少,因此頂行只有一個星號或字元。
演算法
步驟1 − 使用mapM_函式定義printTriangle函式
步驟2 − 程式執行將從main函式開始。main()函式控制整個程式。它被寫成main = do。在main函式中,傳遞一個數字,該圖案將列印到該數字。
步驟3 − 變數“n”被初始化。它將儲存要列印圖案的整數。
步驟4 − 函式呼叫後,使用'putStrLn'語句將結果列印到控制檯。
示例1
在這個例子中,定義了一個printTriangle函式,它接受一個整數n作為輸入,並生成一個字串列表,每個字串包含一定數量的星號。mapM_函式用於將putStrLn函式應用於列表中的每個字串,有效地列印三角形的每一行。
module Main where printTriangle :: Int -> IO () printTriangle n = mapM_ putStrLn [replicate i '*' | i <- [1..n]] main :: IO () main = do let n = 5 printTriangle n
輸出
* ** *** **** *****
示例2
在這個例子中,Control.Monad模組中的forM_函式用於迭代從1到n的整數範圍,併為每次迭代列印一行星號。putStrLn函式用於列印每一行,replicate函式用於生成一個包含i個星號的字串,其中i是當前迭代次數。
import Control.Monad printTriangle :: Int -> IO () printTriangle n = forM_ [1..n] $ \i -> putStrLn (replicate i '*') main :: IO () main = do let n = 5 printTriangle n
輸出
* ** *** **** *****
示例3
在這個例子中,定義了一個printTriangle函式,它接受兩個引數:一個整數n表示行數,一個整數i表示當前行。該函式檢查i是否大於n,如果是,則函式返回而無需執行任何操作。如果i不大於n,則函式使用putStrLn函式列印一行i個星號,然後呼叫自身並將i遞增1。這種遞迴方法一直持續到i大於n,此時函式返回。
printTriangle :: Int -> Int -> IO ()
printTriangle n i
| i > n = return ()
| otherwise = do
putStrLn (replicate i '*')
printTriangle n (i+1)
main :: IO ()
main = do
let n = 5
printTriangle n 1
輸出
* ** *** **** *****
結論
在Haskell中,要列印直角三角形圖案,我們可以使用MapM_或forM_函式,或者可以使用遞迴函式。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP