我有以下問題與我在哈克斯克樹的實現。我有正確的數據類型,我的插入和搜索方法工作。但是,當涉及到測試時,我相當有限。例如,如果我在代碼中聲明一棵樹,例如testtree
,並給它一些值,當試圖插入testree
時,它實際上從不會更新testree。請允許我解釋一下。 如果我在ghci窗口insert 5 testtree
中聲明,它會返回一個新的樹,它是testree的所在,並且將5添加到正確的位置。快樂的時光。如果我嘗試將另一個元素添加到testree中,它會返回原始測試用例添加的新元素的內容。 5消失了。所以問題是我不能改變testree的原始實例,這是一個痛苦的屁股。測試我的插入方法包括創建許多樹,其中包括爲它們添加元素的所有可能性。如果我只能有一棵樹,我可以繼續添加它會更方便。任何幫助將非常感激!繼承人是一個突出顯示我的問題的示例,它是一個我正在實現的2-3-4樹,爲了突出顯示問題,我從中取出了很多代碼。哈斯克爾插入特定的樹
data Tree t = Empty
| Root1 t (Tree t)(Tree t)
| Root2 t t (Tree t)(Tree t)(Tree t)
deriving (Eq, Ord, Show)
leaf1 x = Root1 x (Empty) (Empty)
leaf2 x y = Root2 x y (Empty) (Empty) (Empty)
insert :: Ord t => t -> Tree t -> Tree t
insert t Empty = leaf1 t
insert t (Root1 a Empty Empty)
| t <= a = leaf2 t a
| otherwise = leaf2 a t
insert t (Root1 a left right)
| t <= a = Root1 a (insert t(left)) (right)
| otherwise = Root1 a (left) (insert t(right))
testtree = Root1 5 (Root1 3 (Empty) (Empty)) (Root1 7 (Empty) (Empty))
歡迎來到Stack Overflow。向我們展示一些代碼... – Jubobs 2014-12-06 19:10:04