Да да, и такое тоже бывает :-D
Есть проблема с программой на прологе. Что-то не могу понять :-(
Вот код (+/-)
predicates
child(string, string)
grandchild(string, string)
ggrandchild(string, string)
ancestor(string, string)
clauses
child("Ivan", "Petro").
child("Ivan", "Vira").
child("Vira", "Olena").
child("Vira", "Oleg").
child("Petro", "Maxim").
child("Oleg", "Anna").
grandchild(X, Z) :- child(X, Y), child(Y, Z).
ggrandchild(X, T) :- child(X, Y),
child(Y, Z), child(Z, T).
ancestor(X, Z) :- child(X, Z).
ancestor(X, Z) :- ancestor(X, Y), child(Y, Z).
goal
ancestor("Ivan", X), write(X), nl, fail.
Кто знаком с прологом, тот поймет чего я хочу :-)
Проблемы в строке: ancestor(X, Z) :- ancestor(X, Y), child(Y, Z). Трассирование зацыкливается..
Если поставить: ancestor(X, Z) :- child(X, Y), ancestor(Y, Z), то жизнь прекрасна и трассирование проходит на ура.
Как можно описать причину такого поведения?