Ich habe diese Implementierung eines binären Suchbaum in HaskellGHCI Endlosschleife in binärer Suchbaum
data BST = Nil | Node (BST) Int (BST) deriving Show
emptyTree :: BST
emptyTree = Nil
isEmptyTree :: BST -> Bool
isEmptyTree Nil = True
isEmptyTree _ = False
leftChild :: BST -> BST
leftChild Nil = Nil
leftChild (Node l k r) = l
rightChild :: BST -> BST
rightChild Nil = Nil
rightChild (Node l k r) = r
root :: BST -> Int
root Nil = error "Empty Tree"
root (Node l k r) = k
insert_r :: BST -> Int -> BST
insert_r Nil k = Node Nil k Nil
insert_r [email protected](Node l x r) k
| k < x = Node (insert_r l k) x r
| k > x = Node l x (insert_r r k)
| otherwise = n
Ich versuche, es zu testen, einige Werte in den Baum eingefügt wird. Dies ist ein Beispiel Prüfablauf:
t = Nil
t = insert_r t 2
t = insert_r t 3
t = insert_r t 1
Wenn ich versuche, dies in GHCi zu laufen, zur Zeit „t“ Wert zu prüfen, erhalte ich eine Endlosschleife. Wenn ich jedoch das Ergebnis jeder Einfügung einer neuen Variablen zuweisen, wie folgt aus:
v = insert_r t 2
u = insert_r v 1
den Wert von „u“ Überprüfung funktioniert perfekt. Hat das mit Haskells fauler Bewertung zu tun, oder bin ich etwas falsch in der BST-Implementierung?