Моя цель - иметь возможность перемещать узлы в диаграмме и выводить длину пути в Prolog. Я использую рекурсию, и я застрял в этой проблеме. Вот моя попытка.Как я могу избежать этой ловушки в моей рекурсии Prolog?
edge(a,b).
edge(b,c).
edge(a,d).
edge(d,f).
distance(X,Y,1) :- edge(X,Y).
distance(X,Y,Dis) :- edge(X,Z), distance(Z, Y, D), Dis is D +1.
Вопрос: Я хотел бы иметь возможность сказать Dis = 0. Если путь недействителен. Как и в, нет ребра, соединяющего два узла, Dis = 0. В настоящее время мой код говорит false для недопустимого пути. Мои попытки в этом начинании привели к тому, что я нарушил рекурсию. Спасибо за любую помощь.
Вы уверены в семантике расстояния? Разве Dis Dis = 0 не означает, что оба узла одинаковы? Это можно кодировать как расстояние (X, X, 0). – Hashcut