Haskell程序打印倒置星型图案
在Haskell中,要打印倒置星型图案,我们将使用`mapM_`、`reverse`、`unlines`和`replicate`函数。在第一个例子中,我们将使用`(invertedStarPattern n = mapM_ putStrLn (reverse [replicate i '*' | i <- [1..n]]))`函数,在第二个例子中,我们将使用`invertedTriangle n = unlines $ reverse [replicate i '*' | i <- [1..n]]`函数。在第三个例子中,我们将使用`(mapM_ putStrLn $ map (concat . flip replicate "*") rows)`函数。
方法一:使用`mapM_`、`reverse`和`replicate`函数打印倒置星型图案。
在这种方法中,图案是使用列表推导生成的,该推导创建一个字符串列表,其中每个字符串都是倒置星型图案的一行。`replicate`函数用于为范围n到1中的每个i创建一个长度为i的'*'字符的字符串。
算法
步骤1 − `invertedStarPattern`使用`mapM_`、`reverse`和`replicate`函数定义为:`invertedStarPattern n = mapM_ putStrLn (reverse [replicate i '*' | i <- [1..n]])`。
步骤2 − 程序执行将从`main`函数开始。`main()`函数控制整个程序。它被写成`main = do`。
步骤3 − 初始化名为'n'的变量,它将保存要打印倒置星型图案的行数。
步骤4 − 调用函数后,将生成的倒置星型图案打印到控制台。
示例
在这个例子中,倒置星型图案是使用`mapM_`、`reverse`和`replicate`函数打印的。
invertedStarPattern :: Int -> IO () invertedStarPattern n = mapM_ putStrLn (reverse [replicate i '*' | i <- [1..n]]) main :: IO () main = do let n = 5 invertedStarPattern n
输出
[1 of 1] Compiling Main ( main.hs, main.o ) Linking main ... ***** **** *** ** *
方法二:使用`unlines`函数打印倒置三角形星型图案
在这种方法中,`invertedTriangle`函数接受一个整数n作为输入,并返回一个表示倒置三角形星型图案的字符串。表达式`replicate i '*'`创建一个由i个星号组成的字符串。列表推导`[replicate i '*' | i <- [1..n]]`生成一个字符串列表,其中每个字符串都是星号序列。每个字符串的长度从1增加到n。`reverse`函数应用于步骤4中生成的列表,以反转列表中元素的顺序。然后,`unlines`函数应用于步骤5中生成的列表,以将列表中的元素连接成一个由换行符分隔的单个字符串。
算法
步骤1 − 程序执行将从`main`函数开始。`main()`函数控制整个程序。它被写成`main = do`。
步骤2 − 初始化名为'n'的变量,它将保存要打印倒置三角形星型图案的行数。
步骤3 − `invertedTriangle`函数使用`unlines`和`reverse`函数定义为:`invertedTriangle n = unlines $ reverse [replicate i '*' | i <- [1..n]]`。
步骤4 − 调用函数后,将生成的倒置星型图案打印到控制台。
示例
在这个例子中,`invertedTriangle`以Int作为参数,并返回一个打印倒置三角形图案的IO操作。该图案使用列表推导生成,该推导创建一个字符串列表,其中包含三角形每一行适当数量的星号。然后,`mapM_`函数在每一行打印每个字符串。
main = do let n = 5 putStrLn $ invertedTriangle n invertedTriangle :: Int -> String invertedTriangle n = unlines $ reverse [replicate i '*' | i <- [1..n]]
输出
[1 of 1] Compiling Main ( main.hs, main.o ) Linking main ... ***** **** *** ** *
方法三:使用`flip replicate`函数打印倒置三角形星型图案
在这种方法中,定义了一个整数列表'rows',它从n递减到1,然后使用'map'和'putStrLn'的组合来为列表中的每个整数打印一个星号字符串。
算法
步骤1 − 程序执行将从`main`函数开始。`main()`函数控制整个程序。它被写成`main = do`。
步骤2 − 初始化名为'n'的变量,它将保存要打印倒置三角形星型图案的行数。
步骤3 − `mapM_`函数用于打印生成的倒置三角形星型图案以及`flip replicate`函数,如下所示:`mapM_ putStrLn $ map (concat . flip replicate "*") rows`。
示例
在这个例子中,倒置三角形星型图案是使用在`main`函数中定义的`mapM_`和`flip replicate`函数打印的。
main :: IO () main = do let n = 5 let rows = reverse [1..n] mapM_ putStrLn $ map (concat . flip replicate "*") rows
输出
[1 of 1] Compiling Main ( main.hs, main.o ) Linking main ... ***** **** *** ** *
结论
倒置星形三角形图案是由星号(*)打印成倒三角形的图案。三角形的每一行都比上一行多一个星号,顶行只有一个星号。