Haskell程序:创建无参数但返回值的函数
我们将学习如何使用用户定义函数创建无参数但返回值的函数。在本文中,定义的用户定义函数包含函数定义以及一些返回值,并且在调用时不向其传递任何参数。
在所有示例中,我们将定义用户定义函数来执行某些任务,这些任务将返回一些值,但在调用时不传递参数,例如阶乘、摄氏度转换为华氏度、圆的面积和其他函数。
算法
步骤1 - 通过编写带有返回值的函数定义来定义用户定义函数。
步骤2 - 程序执行将从main函数开始。main()函数控制整个程序。它被写成main = do。在main函数中,用户定义函数被调用,并且不向其传递任何参数。
步骤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中,无参数但有返回值的用户定义函数是一个不接受任何输入,而是将其输出作为返回值的函数。