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.