Haskell程式:檢查陣列是否包含給定值


在Haskell中,我們可以使用遞迴以及`foldr`和`elem`函式來檢查陣列是否包含給定值。在第一個例子中,我們將使用基例和遞迴情況;在第二個例子中,我們將使用`(containsValue x = foldr (\y acc -> acc || x == y) False)`函式;在第三個例子中,我們將使用`(containsValue val arr = elem val arr)`函式。

演算法

  • 步驟1 - 遞迴函式`containsValue`的定義如下:

  • 示例1 -

containsValue _ [] = False
containsValue x (y:ys)
   | x == y = True
   | otherwise = containsValue x ys.
  • 示例2 -

containsValue x = foldr (\y acc -> acc || x == y) False.
  • 示例3 -

containsValue val arr = elem val arr.
  • 步驟2 - 程式執行將從`main`函式開始。`main()`函式控制整個程式。它被寫成`main = do`。在`main`函式中,定義一個示例陣列`arr`和一個示例值`val`,並將它們傳遞給`containsValue`。然後列印函式的結果。

  • 步驟3 - 初始化名為“arr”的變數。它將儲存要搜尋值的整個陣列。名為“val”的變數包含要在整個陣列中搜索的值。

  • 步驟4 - 函式呼叫後,使用`print`函式將結果列印到控制檯。

示例1

在這個例子中,使用了遞迴,檢查列表的第一個元素是否等於x。如果是,則返回`True`。如果不是,則使用列表的其餘部分(ys)和x遞迴呼叫該函式。基例是列表為空的情況,在這種情況下返回`False`。

containsValue :: (Eq a) => a -> [a] -> Bool
containsValue _ [] = False
containsValue x (y:ys)
   | x == y = True
   | otherwise = containsValue x ys

main :: IO ()
main = do
   let arr = [1, 2, 3, 4, 5]
   let val = 3
   print (containsValue val arr)

輸出

True

示例2

在這個例子中,使用了高階函式`foldr`來檢查列表中是否包含某個值。該函式採用一個二元函式`(\y acc -> acc || x == y)`、一個初始累加器值(`False`)和要摺疊的列表(`arr`)。二元函式檢查當前元素y是否等於目標值x。如果是,則返回`True`。如果不是,則返回當前累加器值。

containsValue :: (Eq a) => a -> [a] -> Bool
containsValue x = foldr (\y acc -> acc || x == y) False

main :: IO ()
main = do
   let arr = [1, 2, 3, 4, 5]
   let val = 3
   print (containsValue val arr)

輸出

True

示例3

在這個例子中,`elem`函式如果在列表中找到給定值,則返回`True`,否則返回`False`。這種方法比其他方法更簡單、更簡潔。

containsValue :: (Eq a) => a -> [a] -> Bool
containsValue val arr = elem val arr

main :: IO ()
main = do
   let arr = [1, 2, 3, 4, 5]
   let val = 3
   print (containsValue val arr)

輸出

True

結論

在Haskell中,要檢查陣列是否包含給定值,我們可以使用遞迴或`foldr`和`elem`函式。

更新於:2023年3月27日

瀏覽量:580

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.