Итак, у меня есть определение типа данных для Двоичного дерева поиска в SML:
datatype tree = Void | Node of tree * int * tree;
И у меня также есть эта функция:
fun sub_tree a b Void =
| sub_tree a b (Node (t1, x, t2)) =
if (a <= x) andalso (x < b) then
Node ((sub_tree a b t1), x, (sub_tree a b t2))
else
sub_tree a b t2;
, которая предназначена для прохождения дереваи вывести другое дерево, чьи теги (x в функции) больше или равны a и меньше b (a <= x <b). </p>
Теперь у меня также есть этот пример дерева:
val ex1 = Node(Node(Node(Void, 0, Node(Void, 2, Void)), 3, Node(Void, 5, Void)), 6, Node(Void, 7, Node(Void, 8, Node(Void, 9, Node(Node(Void, 10, Void), 12, Node(Void, 15, Node(Void, 19, Void)))))))
Итак, функция работает в случае, например:
sub_tree 5 8 ex1;
val it = Node (Node (Void, 5, Void), 6, Node (Void, 7, Void)): tree
Но когда она не работает, если a = 0 & b = 1, потому что:
sub_tree 0 1 ex1;
val it = Void: tree
И он должен вернуть: Node (Void, 0, Void)
Так что мне нужна помощь, чтобы указать мне на ошибку, которую я сделал в функции, заранее спасибо!