Я пытаюсь реализовать обход по порядку, который на каждом этапе я получу текущий узел.Например:
?- getnodesinorder(tree(1,nil,nil),X).
X = 1 ;
false.
?- getnodesinorder(tree(5,tree(4,tree(1,nil,tree(3,tree(2,nil,nil),nil)),nil),tree(6,nil,nil)),X).
X = 1 ;
X = 2 ;
X = 3 ;
X = 4 ;
X = 5 ;
X = 6 ;
false.
Я попробовал следующий код:
getnodesinorder(tree(CurrentNode,nil,nil), CurrentNode).
getnodesinorder(tree(X, Left, nil), CurrentNode) :-
getnodesinorder(Left, _ ),
CurrentNode is X.
getnodesinorder(tree(X, nil, Right), CurrentNode) :-
CurrentNode is X,
getnodesinorder(Right, _ ).
getnodesinorder(tree(X, Left, Right), CurrentNode) :-
getnodesinorder(Left, _ ),
CurrentNode is X,
getnodesinorder(Right, _ ).
Так что, конечно, база (первый пример работает), но при попытке запустить второй я получаю
X=5;
false
как результат.Почему это так?