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_ 或递归函数。
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP