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次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.