簡體   English   中英

haskell設置數據類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM