[英]haskell set data type
嘿,每個人我都想弄清楚如何在haskell中設置數據類型,但是我無法弄清楚,這是我到目前為止所擁有的,我有點困惑
data Set a = Node a | List {
list :: [a]
}deriving(Eq,Show,Ord)
insert :: Set Integer -> Set Integer -> Bool
insert (Node itemToInsert) (List list)
|contains (List list) (Node itemToInsert) == False = List(list:(Node itemToInsert))
contains :: Set Integer -> Set Integer -> Bool
contains (List []) (Node numberToFind) = False
contains (List (x:xs)) (Node numberToFind)
|x == (Node numberToFind) = True
|otherwise = contains (List (xs)) (Node numberToFind)
謝謝您的幫助!
從您的代碼看來,您已經了解了,一個集合可以看作一個沒有重復的列表。 因此,讓我們用一個簡單的類型定義來表達這一點:
data Set a = Set [a]
為了確保沒有重復項,可以引入“智能構造函數”,這些函數在技術上不是構造函數,而是按原樣使用的。
empty :: Set a
empty = Set []
我們將需要另一個來創建非空集。 讓我們看一下您的insert
函數。 為什么返回Bool
? 它不應該返回一個集合嗎? 為什么insert
期望兩套? 因此,要將整數插入一組整數中,可以使用以下類型簽名:
insert :: Integer -> Set Integer -> Set Integer
該實現包含兩種情況:1.給定的整數不在給定集中,並且2.給定的整數不在給定集中。
insert x (Set xs)
| not (x `elem` xs) = Set (x:xs)
| otherwise = Set xs
因為,這個問題似乎是家庭作業的一部分。 我想你應該嘗試弄清楚如何自己實現elem
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.