О, хорошее дерево.Получить минимальное количество дерева легко, но если вы хотите действительно получить его, вам нужен другой предикат, чтобы помочь первому предикату найти минимальное значение дерева.
min(tree(X, L, _R), Min) :- min_helper(L, X, Min).
min_helper(null, X, X).
min_helper(tree(X, L, _R), _X0, Min) :- min_helper(L, X, Min).
Но это работает, только если двоичное дерево является деревом поиска.Ваше дерево двоичное дерево поиска?Если не бинарное дерево, то не так просто получить мин. Дерева.Но вы усложняете это, потому что вам нужны минимум значения И оставленный минимум И правильный минимум, но это слишком сложно.Но вы говорите, что целочисленное дерево, так что опять не так сложно.
min(null, null).
min(tree(X, L, R), Min) :-
min(L, LMin),
min(R, RMin),
min_with_null(X, LMin, Min0),
min_with_null(Min0, RMin, Min).
min_with_null(X, Maybe_null, Min) :-
( Maybe_null == null
-> Min = X
; Min is min(X, Maybe_null)
).
Но что такое минус нуля?
?- min(null, Min).
Min = null.
Я проверяю, если ноль, но я не проверяю, целое ли, потому что вы пишетечто-то и говорит целое число.Но вы уверены?
А какой минус какого-то другого дерева?
?- min(tree(1, null, null), Min).
Min = 1.
?- min(tree(1, tree(0, null, null), null), Min).
Min = 0.
?- min(tree(0, tree(1, null, null), null), Min).
Min = 0.
?- min(tree(1, null, tree(0, null, null)), Min).
Min = 0.
?- min(tree(0, null, tree(1, null, null)), Min).
Min = 0.
?- min(tree(1, tree(2, null, null), tree(3, null, null)), Min).
Min = 1.
Я забыл контрольный пример?Я не знаю.