所以基本上我想開始一個節點,它必須大於左子樹,但比右邊小...等等。在我的工作表上,它表示將其分成兩個功能以使其更容易。使用'也許a'。 (它不能匹配型「也許」到「一」,這完全停止了我。驗證二叉搜索樹 - 初學者在哈斯克爾
這是我有什麼,我看到了問過類似的問題,但不能真正理解正確。在此先感謝。
is_valid_binary_search_tree :: Ord a => BSTree a -> Bool
is_valid_binary_search_tree tree = case tree of
Null -> True
Node element t1 t2
| element > get_element t1 -> is_valid_binary_search_tree t1
| element < get_element t2 -> is_valid_binary_search_tree t2
| otherwise -> False
get_element :: BSTree a -> Maybe a
get_element tree = case tree of
Null -> Nothing
Node element t1 t2 -> Just element
它可以編譯,但如果我刪除空在詳盡的get_element模式說。 - >沒什麼 的is_valid_binary_search_tree也沒有,如果子樹的右子樹比主節點小的比較(這是真的是我的大問題)
謝謝,我把它放在一起,並得到了它。 我決定在這個過程中寫一個布爾is_ordered功能,發現它遞歸地檢查它是否是按升序排列,不接受'X:XS = X <= is_ordered xs' 相反:'X:Y :ZS = X <= Y && is_ordered(Y:ZS)' 你知道爲什麼發生這種情況? –
@HerrSchlachter:'x'具有類型'A',同時'is_ordered xs'具有輸入'Bool'。將它們與'<='進行比較是沒有意義的。 – hammar