Я бегу в стену при написании пролога с помощью пролога YAP. Я изолированных мою проблему этих двух строк кода:Бесконечная петля в прологе
is_a(G, A2):-is_a(G, A1), is_a_link(A1, A2).
is_a(x, y).
Если я эти две строки кода в файле, и обращаться к файлу, еп спросить пролог, если is_a(x,y)
, программа никогда не заканчивается, что приводит меня к мысли, есть бесконечный цикл.
Но я не понимаю, почему была бы петля, я просто спросил пролог, является ли одна из ее аксиом истинной, не так ли (без второй мысли) просто выплюнуть Yes
?
Я имею в виду, насколько я понимаю, как работает пролог, он попытается найти истинное утверждение в базе знаний, которое «доказывает» утверждение. Я смущен, почему он не просто возвращает аксиому.
EDIT:
Переключение строк кода, т.е.
is_a(x, y).
is_a(G, A2):-is_a(G, A1), is_a_link(A1, A2).
делает пролог не врезаться, так как очевидно, первая встречает истинное утверждение.
Как 'is_a_link/2' реализованного? Несмотря на то, что вы заменили этот факт предикатом, он все равно не прекратится. Просто бывает, что вы производите бесконечное решение 'x' и' y' вместо одного раза. – lurker