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


在Haskell中,我們將透過使用使用者自定義函式來建立一個帶引數但無返回值的函式。在本文中,我們將定義使用者自定義函式,這些函式包含不返回值的函式定義,並透過向其傳遞一些所需引數來呼叫它。

在所有示例中,我們將定義使用者自定義函式來執行某些不返回值的任務,但會傳遞引數,例如printSum、printString、printList和其他函式。

演算法

  • 步驟1 − 透過編寫其定義而不返回值來定義使用者自定義函式。

  • 步驟2 − 程式執行將從主函式開始。main()函式控制整個程式。它寫成main = do。在主函式中,透過向其傳遞一些所需的引數來呼叫使用者自定義函式。

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

示例1

在這個例子中,函式printSum接受兩個Int引數x和y,並使用IO monad中的putStrLn函式將引數的和列印到控制檯。printSum的返回型別是IO (),表示它是一個不返回值的IO操作。

printSum :: Int -> Int -> IO ()
printSum x y = putStrLn (show x ++ " + " ++ show y ++ " = " ++ show (x + y))
main = do
printSum 2 3

輸出

2 + 3 = 5

示例2

在這個例子中,printString接受一個String引數,並使用putStrLn將其列印到控制檯。

printString :: String -> IO ()
printString str = putStrLn str
main = do
printString "hello"

輸出

hello

示例3

在這個例子中,printList接受一個列表作為引數並將其列印到控制檯。

printList :: [Int] -> IO ()
printList xs = mapM_ print xs
main = do
printList [1..5]

輸出

1
2
3
4
5

示例4

在這個例子中,concatenate接受兩個String作為引數,將它們連線起來,並使用putStrLn將其列印到控制檯。

concatenate :: String -> String -> IO ()
concatenate str1 str2 = putStrLn (str1 ++ str2)
main = do
concatenate "hello" "India"

輸出

helloIndia

示例5

在這個例子中,printProduct接受兩個整數作為引數,將它們相乘,並使用putStrLn將其乘積列印到控制檯。

printProduct :: Int -> Int -> IO ()
printProduct x y = putStrLn (show x ++ " * " ++ show y ++ " = " ++ show (x * y))
main = do
printProduct 3 4

輸出

3 * 4 = 12

示例6

在這個例子中,printMax接受一個整數列表作為引數,比較它們,並使用putStrLn列印最大整數到控制檯。

printMax :: [Int] -> IO ()
printMax xs = putStrLn (show (maximum xs))
main = do
printMax [1,7,9,5,4]

輸出

9

示例7

在這個例子中,printStringsTogether接受兩個字串作為引數,並使用putStrLn將它們並排列印到控制檯。

printStringsTogether :: String -> String -> IO ()
printStringsTogether str1 str2 = putStrLn (str1 ++ " " ++ str2)
main = do
printStringsTogether "Hello" "World"

輸出

Hello World

示例8

在這個例子中,printOddNumbers接受一個整數列表作為引數,比較它們,並使用putStrLn列印奇數到控制檯。

printOddNumbers :: [Int] -> IO ()
printOddNumbers xs = mapM_ print (filter odd xs)
main = do
printOddNumbers [1,5,3,2,4,6,7,8]

輸出

1
5
3
7

示例9

在這個例子中,printStringWithBorder接受一個字串作為引數,並使用putStrLn列印帶邊框的字串到控制檯。

printStringWithBorder :: String -> IO ()
printStringWithBorder str = do
   putStrLn (replicate (length str + 4) '*')
   putStrLn ("* " ++ str ++ " *")
   putStrLn (replicate (length str + 4) '*')
main = do
printStringWithBorder "Hello"

輸出

*********
* Hello *
*********

示例10

在這個例子中,printFirstCharacters接受一個字串列表作為引數,並使用putStrLn列印列表中每個字串的第一個字元到控制檯。

printFirstCharacters :: [String] -> IO ()
printFirstCharacters strings = mapM_ (\str -> putStrLn (take 1 str)) strings
main = do
printFirstCharacters ["Hello","India"]

輸出

H
I

結論

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

在Haskell中,沒有返回值但有引數的函式通常被稱為“動作函式”。它們是執行某些操作(例如列印到螢幕、從鍵盤讀取等)但不返回值的函式。這些函式在IO monad中定義,它們的返回型別通常是IO ()。

更新於:2023年3月1日

221 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告