Haskell程序 创建一个没有参数但返回值的函数
我们将学习如何使用用户定义的函数创建一个没有参数但返回一个值的函数。在这篇文章中,用户定义的函数将包含带有一些返回值的函数定义,并且在调用时不传递任何参数。
在所有的例子中,我们将定义用户定义的函数来执行某些任务,这些任务将返回一些值,但没有参数,如阶乘、摄氏度到华氏度、圆面积和其他函数。
算法
- 第1步– 用户定义的函数是通过编写其定义和返回值来定义的。
-
第2步 – 程序的执行将从主函数开始。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单体的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单体的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单体中的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单体的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单体的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中,一个没有参数但有返回值的用户定义函数是一个不接受任何输入的函数,而是将一个值作为其输出返回。