つまり、基本的にノードから始めたいのですが、それは左側のサブツリーよりも大きく、右側よりも小さくする必要があります...など。私のワークシートでは、簡単にするために2つの関数に分割するように書かれています。'多分'を使用するには。(タイプ'を'から'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
コンパイルはできますが、Null-> Nothingを削除すると、get_elementに網羅的でないパターンが表示されます。is_valid_binary_search_treeは、サブツリーの右側のサブツリーがメインノードよりも小さいかどうかも比較しません。(これは本当に私の大きな問題です)