Haskell 程序:创建无参数且无返回值的函数


在 Haskell 中,我们可以使用用户定义函数来创建无参数且无返回值的函数。在所有示例中,我们将定义用户定义函数来执行某些不返回值且不带参数的任务,例如 printGreeting、printMultipleLines、printSquares 函数。

算法

  • 步骤 1 - 通过编写其定义(不返回任何值)来定义用户定义函数。

  • 步骤 2 - 程序执行将从 main 函数开始。main() 函数控制整个程序。它被写成 main = do。在 main 函数中,用户定义函数在不传递任何参数的情况下被调用。

  • 步骤 3 - 函数被调用后,结果将打印到控制台。

示例 1

在此示例中,printGreeting 是一个函数,它只是将字符串“Hello, there!”打印到控制台。

printGreeting :: IO ()
printGreeting = putStrLn "Hello, there!"
main = do
printGreeting

输出

Hello, there!

示例 2

在此示例中,printMessage 使用 do 表示法执行两个独立的 putStrLn 操作,这两个操作将字符串“This is a message.” 和“Goodbye!”打印到控制台。

printMessage :: IO ()
printMessage = do
   putStrLn "This is a message."
   putStrLn "Goodbye!"
main = do
printMessage

输出

This is a message.
Goodbye!

示例 3

在此示例中,printMultipleLines 使用 mapM_ 函数将 putStrLn 函数应用于字符串列表,有效地将每个字符串打印在单独的行上。mapM_ 中的 _ 表示该函数用于其副作用(打印到控制台),并且每个操作的结果都被丢弃。

printMultipleLines :: IO ()
printMultipleLines = mapM_ putStrLn ["Line 1", "Line 2", "Line 3"]
main = do
printMultipleLines

输出

Line 1
Line 2
Line 3

示例 4

在此示例中,printNumbers 使用 mapM_ 函数打印从 1 到 5 的数字。

printNumbers :: IO ()
printNumbers = mapM_ print [1..5]
main = do
printNumbers

输出

1
2
3
4
5

示例 5

在此示例中,printSquares 使用 mapM_ 函数打印从 1 到 5 的数字的平方。(^2) 函数将数字提高到 2 的幂,而 (print . (^2)) 表达式组合了这两个函数以按顺序应用它们。

printSquares :: IO ()
printSquares = mapM_ (print . (^2)) [1..5]
main = do
printSquares

输出

1
4
9
16
25

示例 6

在此示例中,printSum 使用 print 函数打印从 1 到 100 的数字的总和。$ 运算符用于将 print 函数应用于 sum 函数的结果,该函数将列表的元素加起来。

printSum :: IO ()
printSum = print $ sum [1..100]
main = do
printSum

输出

5050

示例 7

在此示例中,printCountdown 使用 mapM_ 函数打印从 10 到 1 的数字。(putStrLn . show) 表达式将 show 函数(将值转换为字符串)与 putStrLn 函数组合,有效地将数字打印为字符串。

printCountdown :: IO ()
printCountdown = mapM_ (putStrLn . show) [10, 9..1]
main = do
printCountdown

输出

10
9
8
7
6
5
4
3
2
1

示例 8

在此示例中,printFibonacci 使用 mapM_ 函数打印前 10 个斐波那契数。fib 函数计算第 n 个斐波那契数,而 mapM_ 函数将 print . fib 应用于从 1 到 10 的数字列表。where 子句定义了 fib 函数,该函数使用简单的递归定义来计算序列中的每个数字。

printFibonacci :: IO ()
printFibonacci = mapM_ (print . fib) [1..10]
   where
      fib n = if n <= 1 then n else fib (n-1) + fib (n-2)
main = do
printFibonacci

输出

1
1
2
3
5
8
13
21
34
55

示例 9

在此示例中,printFactorial 使用 mapM_ 函数打印从 1 到 5 的数字的阶乘。factorial 函数计算给定数字的阶乘,而 mapM_ 函数将 print . factorial 应用于数字列表。factorial 函数在 where 子句中定义。

printFactorial :: IO ()
printFactorial = mapM_ (print . factorial) [1..5]
   where
      factorial n = if n <= 1 then 1 else n * factorial (n-1)
main = do
printFactorial

输出

1
2
6
24
120

结论

在 Haskell 中,用户定义函数是由程序员创建的用于执行特定操作的函数。用户可以根据需要定义函数,即使在函数定义中不传递任何参数也不返回值。

更新于: 2023-03-01

380 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.