Haskell 程序创建一个没有参数但返回值的函数
我们将学习如何使用用户定义函数创建一个没有参数但返回值的函数。在本文中,用户定义函数的定义将包含具有一些返回值的函数定义,并且在调用时不传递任何参数。
在所有示例中,我们将定义用户定义函数来执行某些任务,这些任务将返回一些值但不传递参数,例如 factorial、celsiusToFahrenheit、circleArea 和其他函数。
算法
步骤 1 - 用户定义函数通过编写具有返回值的定义来定义。
步骤 2 - 程序执行将从主函数开始。main() 函数完全控制程序。它写为 main = do。在主函数中,调用用户定义函数时未传递任何参数。
步骤 3 - 调用函数后,结果将打印到控制台。
示例 1
在此示例中,函数 factorial 以一个整数作为参数,并使用 IO monad 中的 putStrLn 函数将参数的阶乘打印到控制台。
factorial :: Int -> Int factorial 0 = 1 factorial n = n * factorial (n - 1) main :: IO () main = do putStrLn "Factorial of a number:" let num = 5 let result = factorial num putStrLn (show result)
输出
Factorial of a number: 120
示例 2
在此示例中,函数 celsiusToFahrenheit 接受一个整数作为参数,并使用 IO monad 中的 putStrLn 函数将参数的摄氏度转换后的华氏度值打印到控制台。
celsiusToFahrenheit :: Float -> Float celsiusToFahrenheit c = (9/5) * c + 32 main :: IO () main = do putStrLn "Temperature conversion:" let celsius = 37.0 let fahrenheit = celsiusToFahrenheit celsius putStrLn (show celsius ++ "°C is equivalent to " ++ show fahrenheit ++ "°F")
输出
Temperature conversion: 37.0°C is equivalent to 98.6°F
示例 3
在此示例中,函数 circleArea 将一个整数作为半径参数,并使用 IO monad 中的 putStrLn 函数将半径作为参数的圆的面积打印到控制台。
circleArea :: Float -> Float circleArea r = pi * r * r main :: IO () main = do putStrLn "Area of a circle:" let radius = 5.0 let area = circleArea radius putStrLn (show area)
输出
Area of a circle: 78.53982
示例 4
在此示例中,函数 reverseString 将一个字符串作为参数,并使用 IO monad 中的 putStrLn 函数将该字符串及其反向字符串(使用该字符串作为参数)打印到控制台。
reverseString :: String -> String reverseString str = reverse str main :: IO () main = do putStrLn "Reversing a string:" let original = "Hello, world!" let reversed = reverseString original putStrLn (original ++ " reversed is " ++ reversed)
输出
Reversing a string: Hello, world! reversed is !dlrow ,olleH
示例 5
在此示例中,函数 isEven 以一个整数作为参数,检查它是否为偶数,并使用 IO monad 中的 putStrLn 函数将结果打印到控制台。
isEven :: Int -> Bool isEven n = n `mod` 2 == 0 main :: IO () main = do putStrLn "Checking if a number is even:" let number = 4 let result = isEven number putStrLn (show number ++ " is " ++ (if result then "even" else "odd"))
输出
Checking if a number is even: 4 is even
示例 6
在此示例中,函数 maxOfTwoNumbers 接受两个整数作为参数,比较它们并使用 IO monad 中的 putStrLn 函数将两个数字中的最大值打印到控制台。
maxOfTwoNumbers :: Int -> Int -> Int maxOfTwoNumbers x y = if x > y then x else y main :: IO () main = do putStrLn "Maximum of two numbers:" let x = 3 let y = 7 let max = maxOfTwoNumbers x y putStrLn (show x ++ " and " ++ show y ++ ": " ++ show max)
输出
Maximum of two numbers: 3 and 7: 7
结论
在 Haskell 中,用户定义函数是程序员创建的用于执行特定操作的函数。用户可以根据需要定义函数,甚至无需在函数定义中传递任何参数并返回某个值。在 Haskell 中,没有参数但有返回值的用户定义函数是不接受任何输入,而是返回一个值作为输出的函数。