我目前正在做一個任務,我必須在Haskell中創建一個二叉樹。Ord在二叉樹中的用法
我們必須使用下面的數據類型定義:
data Tree a = Nil | Node a (Tree a) (Tree a) deriving (Eq,Ord,Show)
與價值無樹是空的(有序)樹和一個非空的樹由一個值和兩個子樹。
我必須編寫一個函數「isOrderedTree」,它對有序的樹返回True,對無序的樹返回False。
函數的定義如下:
isOrderedTree :: Ord a => Tree a -> Bool
isOrderedTree Nil = True
isOrderedTree (Node x Nil Nil) = True
isOrderedTree (Node x (Node y a b) Nil) = x > y && isOrderedTree (Node y a b) && x > getMax (getValues (Node y a b))
isOrderedTree (Node x Nil (Node y a b)) = y > x && isOrderedTree (Node y a b) && x < getMin (getValues (Node y a b))
isOrderedTree (Node x (Node y a b) (Node z c d)) = x > y && x < z && isOrderedTree (Node y a b) && isOrderedTree (Node z c d) && x > getMax (getValues (Node y a b)) && x < getMin (getValues (Node z c d))
我的問題是,下面的函數調用不起作用:
isOrderedTree Nil
我收到以下錯誤信息:
Ambiguous type variable ‘a0’ arising from a use of ‘isOrderedTree’ prevents the constraint ‘(Ord a0)’ from being solved.
Probable fix: use a type annotation to specify what ‘a0’ should be.
These potential instances exist:
instance (Ord a, Ord b) => Ord (Either a b)
instance Ord Ordering
instance Ord Integer
有人知道我在這裏失蹤了嗎?
~~你不顯示你如何試圖使用'isOrderedTree'。~~哎呀,你這樣做,但一個無法讀取由於格式。 – Zeta
備註:此實現可能不正確,具體取決於「排序」的含義。例如,節點1(節點0無節點2無節點)無節點 - 在節點1的「小」子樹中有'2' - 是否有序?你的功能對這種情況說什麼? –
@DanielWagner謝謝,我現在已經解決了這個問題。 – Alexander