第8章データを定義Tree
とバイナリ検索機能occurs
:オペレータ比較Prelude.compare
data Tree a = Leaf a | Node (Tree a) a (Tree a)
occurs :: Ord a => a -> Tree a -> Bool
occurs x (Leaf y) = x == y
occurs x (Node l y r) | x == y = True
| x < y = occurs x l
| otherwise = occurs x r
は演習3 Prelude.compare
と質問とoccurs
を再定義するように求められ
なぜこの新しい定義は元のバージョンより効率的ですか?ここで
私は私の定義を与える:
occurs :: Ord a => a -> Tree a -> Bool
occurs x (Leaf y) = x == y
occurs x (Node l y r) = case compare x y of EQ -> True
LT -> occurs x l
GT -> occurs x r
しかし、私は、効率のブーストが表示されません。何かありますか?
私は間違った方法でそれを学びますか?
'Tree String'を検討してください。ツリー内のすべての文字列に長さNの共通接頭辞を付けます。次に、両方の場合で個々の文字比較をカウントします。 –