Haskell 程式列印正方形星號圖案


在 Haskell 中,我們可以使用諸如 mapM、forM 或遞迴函式之類的內部函式來列印正方形星號圖案。

正方形星號圖案是由星號(或星號,用“*”符號表示)組成的二維圖案,排列成正方形形狀,如下所示。

****
****
****
****

正方形圖案是透過列印指定數量的行形成的,每行包含指定數量的星號。圖案可以是任何大小,每行中的行數和星號數決定了正方形圖案的整體大小。

演算法

  • 步驟 1 - 定義一個名為 generateLine 的使用者定義函式

  • 步驟 2 - 程式執行將從 main 函式開始。main() 函式控制整個程式。它寫成 main = do。在 main 函式中,傳遞了一個數字,該數字將列印正方形星號圖案。

  • 步驟 3 - 變數“lines”正在初始化。它將儲存要列印正方形星號圖案的整數。

  • 步驟 4 - 函式呼叫後,使用 'putStrLn' 語句將結果列印到控制檯。

示例 1

在這個示例中,generateLine 函式透過重複 n 次“*”字元來生成正方形圖案的一行。printSquare 函式透過重複 n 次行並使用 mapM_ putStrLn 列印每一行來列印圖案。

module Main where

generateLine :: Int -> String
generateLine n = replicate n '*'

printSquare :: Int -> IO ()
printSquare n = mapM_ putStrLn (replicate n (generateLine n))

main :: IO ()
main = do
   let lines = 4
   printSquare lines

輸出

****
****
****
****

示例 2

在這個示例中,使用 mapM_ 和 replicate 函式定義了該函式以列印正方形星號圖案。

module Main where
printSquare :: Int -> IO ()
printSquare n = mapM_ putStrLn [replicate n '*' | _ <- [1..n]]

main :: IO ()
main = do
   let lines = 4
   printSquare lines

輸出

****
****
****
****

示例 3

在這個示例中,generateLine 函式透過重複 n 次“*”字元來生成正方形圖案的一行。printSquare 函式透過重複 n 次行並使用 forM_ putStrLn 列印每一行來列印圖案。

module Main where

import Control.Monad (forM_)

printSquare :: Int -> IO ()
printSquare n = forM_ [1..n] $ \i -> putStrLn (replicate n '*')

main :: IO ()
main = do
   let lines = 4
   printSquare lines

輸出

****
****
****
****

示例 4

在這個示例中,printLine 函式用於列印一行包含 n 個“*”字元,printSquare 函式用於列印整個正方形圖案,其中包含 n 行和每行 m 個星號。該函式使用條件語句在列印完所有 n 行後停止遞迴。

module Main where

printLine :: Int -> IO ()
printLine 0 = return ()
printLine n = do
   putChar '*'
   printLine (n - 1)

printSquare :: Int -> Int -> IO ()
printSquare n m
   | n == 0 = return ()
   | otherwise = do
      printLine m
      putStrLn ""
      printSquare (n - 1) m

main :: IO ()
main = do
   let lines = 4
   printSquare lines lines

輸出

****
****
****
****

結論

在 Haskell 中,要列印正方形星號圖案,我們可以使用 MapM_、forM_ 或遞迴函式。

更新於:2023年4月6日

282 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.