Предполагается, что это двоичное дерево поиска и задано правило, что above(X,Y)
- X
находится непосредственно над Y
. Также я создал правило root(X)
- X
не имеет родителя.пролог в математике - поиск уровня узла в прологе
Затем я пытался выяснить, что такое глубина узла в этом дереве. Предположим, что корневой узел дерева «r». Итак, я получил факт level(r,0)
. Чтобы реализовать правило level(N,D) :-
, я подумал, что здесь должна быть рекурсия. Таким образом, я попытался
level(N,D): \+ root(N), above(X,N), D is D+1, level(X,D).
Так что, если N
не является корнем, то есть узел X
выше N
и уровень D
плюс один, то рекурсии. Но когда я тестировал это, он просто работает для условия корня. Когда я создал больше фактов, таких как node «s», это левый элемент узла «r», My query - level (s, D). Он возвращает мне «нет». Я проследил запрос, он показывает мне
1 1 Call: level(s,_16) ?
1 1 Fail: level(s,_16) ?
Я просто запутанным, почему он терпит неудачу, когда я называю level(s,D)
?
ли Вы забыли тире ('-') в запросе , или это просто опечатка? –