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中,无参数但有返回值的用户定义函数是一个不接受任何输入,而是将其输出作为返回值的函数。

更新于: 2023年3月1日

304次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告