Haskell 程序创建一个没有参数但返回值的函数

haskellserver side programmingprogramming

我们将学习如何使用用户定义函数创建一个没有参数但返回值的函数。在本文中,用户定义函数的定义将包含具有一些返回值的函数定义,并且在调用时不传递任何参数。

在所有示例中,我们将定义用户定义函数来执行某些任务,这些任务将返回一些值但不传递参数,例如 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 中,没有参数但有返回值的用户定义函数是不接受任何输入,而是返回一个值作为输出的函数。


相关文章