Haskell 程式:建立無引數且無返回值的函式


在 Haskell 中,我們可以使用使用者定義函式來建立無引數且無返回值的函式。在所有示例中,我們將定義使用者定義函式來執行某些不返回值且不帶引數的任務,例如 printGreeting、printMultipleLines、printSquares 函式。

演算法

  • 步驟 1 - 透過編寫其定義(不返回任何值)來定義使用者定義函式。

  • 步驟 2 - 程式執行將從 main 函式開始。main() 函式控制整個程式。它被寫成 main = do。在 main 函式中,使用者定義函式在不傳遞任何引數的情況下被呼叫。

  • 步驟 3 - 函式被呼叫後,結果將列印到控制檯。

示例 1

在此示例中,printGreeting 是一個函式,它只是將字串“Hello, there!”列印到控制檯。

printGreeting :: IO ()
printGreeting = putStrLn "Hello, there!"
main = do
printGreeting

輸出

Hello, there!

示例 2

在此示例中,printMessage 使用 do 表示法執行兩個獨立的 putStrLn 操作,這兩個操作將字串“This is a message.” 和“Goodbye!”列印到控制檯。

printMessage :: IO ()
printMessage = do
   putStrLn "This is a message."
   putStrLn "Goodbye!"
main = do
printMessage

輸出

This is a message.
Goodbye!

示例 3

在此示例中,printMultipleLines 使用 mapM_ 函式將 putStrLn 函式應用於字串列表,有效地將每個字串列印在單獨的行上。mapM_ 中的 _ 表示該函式用於其副作用(列印到控制檯),並且每個操作的結果都被丟棄。

printMultipleLines :: IO ()
printMultipleLines = mapM_ putStrLn ["Line 1", "Line 2", "Line 3"]
main = do
printMultipleLines

輸出

Line 1
Line 2
Line 3

示例 4

在此示例中,printNumbers 使用 mapM_ 函式列印從 1 到 5 的數字。

printNumbers :: IO ()
printNumbers = mapM_ print [1..5]
main = do
printNumbers

輸出

1
2
3
4
5

示例 5

在此示例中,printSquares 使用 mapM_ 函式列印從 1 到 5 的數字的平方。(^2) 函式將數字提高到 2 的冪,而 (print . (^2)) 表示式組合了這兩個函式以按順序應用它們。

printSquares :: IO ()
printSquares = mapM_ (print . (^2)) [1..5]
main = do
printSquares

輸出

1
4
9
16
25

示例 6

在此示例中,printSum 使用 print 函式列印從 1 到 100 的數字的總和。$ 運算子用於將 print 函式應用於 sum 函式的結果,該函式將列表的元素加起來。

printSum :: IO ()
printSum = print $ sum [1..100]
main = do
printSum

輸出

5050

示例 7

在此示例中,printCountdown 使用 mapM_ 函式列印從 10 到 1 的數字。(putStrLn . show) 表示式將 show 函式(將值轉換為字串)與 putStrLn 函式組合,有效地將數字列印為字串。

printCountdown :: IO ()
printCountdown = mapM_ (putStrLn . show) [10, 9..1]
main = do
printCountdown

輸出

10
9
8
7
6
5
4
3
2
1

示例 8

在此示例中,printFibonacci 使用 mapM_ 函式列印前 10 個斐波那契數。fib 函式計算第 n 個斐波那契數,而 mapM_ 函式將 print . fib 應用於從 1 到 10 的數字列表。where 子句定義了 fib 函式,該函式使用簡單的遞迴定義來計算序列中的每個數字。

printFibonacci :: IO ()
printFibonacci = mapM_ (print . fib) [1..10]
   where
      fib n = if n <= 1 then n else fib (n-1) + fib (n-2)
main = do
printFibonacci

輸出

1
1
2
3
5
8
13
21
34
55

示例 9

在此示例中,printFactorial 使用 mapM_ 函式列印從 1 到 5 的數字的階乘。factorial 函式計算給定數字的階乘,而 mapM_ 函式將 print . factorial 應用於數字列表。factorial 函式在 where 子句中定義。

printFactorial :: IO ()
printFactorial = mapM_ (print . factorial) [1..5]
   where
      factorial n = if n <= 1 then 1 else n * factorial (n-1)
main = do
printFactorial

輸出

1
2
6
24
120

結論

在 Haskell 中,使用者定義函式是由程式設計師建立的用於執行特定操作的函式。使用者可以根據需要定義函式,即使在函式定義中不傳遞任何引數也不返回值。

更新於: 2023-03-01

380 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告