Извлечь минимальное значение дерева Пролог - PullRequest
0 голосов
/ 20 ноября 2018

Я очень новичок в Прологе, поэтому этот вопрос может быть и станет бесполезным, так или иначе, я определил дерево Пролога следующим образом:

type([null, tree(T, tree(T), tree(T))]:tree(T)).  

, что означает, что дерево является нулевым или имеетлевое поддерево и правое поддерево.
Затем я определил предикат, который должен выводить минимальное значение узла этого дерева, а именно:

pred(min(tree(T), integer)).
%% (++ --)
pred(calc_min(integer, integer, integer, integer)).
%% (++, ++, ++, --)

    min(tree(Root, null, null), Root).
    min(tree(Root, Left, Right), Result):-
        min(Left, LeftRes),
        min(Right, RightRes),
        calc_min(Root, LeftRes, RightRes, Result).

Я думаю, что мне нужно определить базовое предложение, гдедерево - это нулевое дерево, но я не знаю, что выводить.

1 Ответ

0 голосов
/ 21 ноября 2018

О, хорошее дерево.Получить минимальное количество дерева легко, но если вы хотите действительно получить его, вам нужен другой предикат, чтобы помочь первому предикату найти минимальное значение дерева.

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.

Я забыл контрольный пример?Я не знаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...