Haskell 程式返回函式中的多個值


在 Haskell 中,我們可以透過使用使用者定義函式以及元組、自定義資料型別和 Maybe 資料型別來從函式中返回多個值。在第一個示例中,我們將使用 (myFunction = ("Hello, World!", 42)),在第二個示例中,我們將使用 (data MyData = MyData { stringValue :: String, intValue :: Int })。在第三個示例中,我們將使用 (myFunction :: Maybe (String, Int))。

方法 1:使用元組

在這種方法中,函式可以透過使用元組返回多個值。元組是一種資料結構,它可以儲存不同或相同型別的多值。

演算法

  • 步驟 1 − 使用者定義函式透過編寫其包含元組的定義來定義,該元組將在計算後返回多個值。

  • 步驟 2 − 程式執行將從主函式開始。main() 函式控制整個程式。它寫成 main = do。在 main 函式中,呼叫 myFunction 並使用模式匹配解包其結果並將其分配給變數 resultString 和 resultInt。

  • 步驟 3 − 然後使用 putStrLn 函式將 resultString 的值列印到控制檯,並使用 print 函式列印 resultInt 的值。

示例

在此示例中,定義了一個 Haskell 函式 myFunction,它返回一個包含兩個值的元組,一個字串“Hello, World!”和一個整數 42。

myFunction :: (String, Int)
myFunction = ("Hello, World!", 42)
main = do
   let (resultString, resultInt) = myFunction
   putStrLn resultString
   print resultInt

輸出

Hello, World!
42

方法 2:使用自定義資料型別從使用者定義函式返回多個值

在這種方法中,使用自定義資料型別 MyData,它有兩個欄位 stringValue 和 intValue,用於儲存要返回的值。myFunction 返回使用記錄語法構造的 MyData 型別的值。

演算法

  • 步驟 1 − 使用者定義函式透過編寫其使用自定義資料型別的定義來定義,該自定義資料型別將在計算後返回多個值。

  • 步驟 2 − 程式執行將從主函式開始。main() 函式控制整個程式。它寫成 main = do。在 main 函式中,呼叫 myFunction 並將其結果分配給變數 result。然後使用點表示法訪問欄位 stringValue 和 intValue 的值,並分別傳遞給 putStrLn 和 print 函式,以將它們列印到控制檯。

  • 步驟 3 − 然後使用 putStrLn 函式將字串值列印到控制檯,並使用 print 函式列印整數。

示例

在此示例中,定義了一個 Haskell 函式 myFunction,它使用自定義資料型別返回兩個值,一個字串“Hello, World!”和一個整數 42。

data MyData = MyData { stringValue :: String, intValue :: Int }

myFunction :: MyData
myFunction = MyData { stringValue = "Hello, World!", intValue = 42 }

main = do
   let result = myFunction
   putStrLn (stringValue result)
   print (intValue result)

輸出

Hello, World!
42

方法 3:使用 Maybe 資料型別從使用者定義函式返回多個值

在這種方法中,使用 Maybe 資料型別,用於表示可能存在也可能不存在的值。myFunction 返回 Maybe (String, Int) 型別的值,在本例中,它是一個包含字串和整數型別值元組的 Just 值。

演算法

  • 步驟 1 − 使用者定義函式透過編寫其使用 Maybe 資料型別的定義來定義,該 Maybe 資料型別將在計算後返回多個值。

  • 步驟 2 − 程式執行將從主函式開始。main() 函式控制整個程式。它寫成 main = do。在 main 函式中,呼叫 myFunction 並將其結果分配給變數 result。然後使用 case 表示式對 result 的值進行模式匹配,如果結果是 Just,則分別使用 putStrLn 和 print 函式將字串和整數型別值列印到控制檯,或者如果結果是 Nothing,則列印訊息“未找到值”。

  • 步驟 3 − 然後使用 putStrLn 函式將字串值列印到控制檯,並使用 print 函式列印整數。

示例

在此示例中,定義了一個 Haskell 函式 myFunction,它使用 Maybe 資料型別返回兩個值,一個字串“Hello, World!”和一個整數 42。

myFunction :: Maybe (String, Int)
myFunction = Just ("Hello, World!", 42)

main = do
   let result = myFunction
   case result of
      Just (str, i) -> do
         putStrLn str
         print i
      Nothing -> putStrLn "No values found."

輸出

Hello, World!
42

結論

在 Haskell 中,有多種方法可以從函式中返回多個值,包括使用元組、使用 Either 資料型別、使用 Maybe 資料型別或使用自定義資料型別。使用者定義函式是由程式設計師建立的函式,用於執行特定操作。使用者可以根據需要定義函式,透過傳遞任何所需的引數並從函式中返回多個值。

更新於: 2023年3月1日

1K+ 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.