這是資料型別:
data Fruit = Apple | Banana | Orange
data Basket = Basket Fruit Int
現在在代碼中,有一個串列,Basket里面可以有任何一個Fruit。如何過濾掉其中的所有Basketswith Apple?在 Python 中有一個函式type或者instanceof可能會有所幫助,但不確定 Haskell 如何處理這個問題?
baskets = [Baseket (Apple 10),Baseket (Banana 2),Baseket (Apple 6)]
uj5u.com熱心網友回復:
首先,您的代碼中有幾個拼寫錯誤。如果Basket意味著里面有一個水果和整數,那么它應該是
data Basket = Basket Fruit Int
其次,Basket應該使用兩個引數呼叫建構式,并且引數周圍沒有括號,因此您的串列是
baskets :: [Basket]
baskets = [Basket Apple 10, Basket Banana 2, Basket Apple 6]
最后,你使用了“過濾器”這個詞,所以我懷疑你已經推測你正在尋找的操作就是filter函式。
filter :: (a -> Bool) -> [a] -> [a]
在你的情況下,a ~ Basket. 所以我們需要給它一個從籃子到它的映射,Bool當(且僅當)籃子里有蘋果時,它回傳 true。由于我們要比較水果的相等性,我們需要一個Eq實體Fruit(從技術上講,我們可以進行模式匹配,但由于Fruit顯然是一個列舉開始,它應該有Eq, Ord,Enum和所有好的實體)。
data Fruit = Apple | Banana | Orange deriving (Eq)
現在我們的filter.
appleBaskets :: [Basket]
appleBaskets = filter (\(Basket fruitType _) -> fruitType == Apple) baskets
我們使用模式匹配解構lambda的Basket內部,然后將水果型別與Apple值進行比較。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/493304.html
