Haskell 程序创建无参数、无返回值的函数
在 Haskell 中,我们可以使用用户定义函数创建无参数、无返回值的函数。在所有示例中,我们将定义用户定义函数来执行某些不返回任何值且不带参数传递的任务,例如 printGreeting、printMultipleLines、printSquares 函数。
算法
步骤 1 - 用户定义函数通过编写其定义来定义,而不返回任何值。
步骤 2 - 程序执行将从主函数开始。main() 函数完全控制程序。它写为 main = do。在主函数中,调用用户定义函数时不传递任何参数。
步骤 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 的数字的阶乘。阶乘函数计算给定数字的阶乘,mapM_ 函数将 print . 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 中,用户定义函数是程序员创建的用于执行特定操作的函数。用户可以根据需要定义函数,甚至可以在函数定义中不传递任何参数也不返回任何值。