Мой код работает по своему прямому назначению, но всегда зацикливается в конце, что приводит к ошибке, говорящей о превышении предела стека. Мой код ниже:
byCar(auckland,hamilton).
byCar(hamilton,raglan).
byCar(valmont,saarbruecken).
byCar(valmont,metz).
byTrain(metz,frankfurt).
byTrain(saarbruecken,frankfurt).
byTrain(metz,paris).
byTrain(saarbruecken,paris).
byPlane(frankfurt,bangkok).
byPlane(frankfurt,singapore).
byPlane(paris,losAngeles).
byPlane(bangkok,auckland).
byPlane(singapore,auckland).
byPlane(losAngeles,auckland).
travel(X,Y):- byCar(X,Y).
travel(X,Y):- byTrain(X,Y).
travel(X,Y):- byPlane(X,Y).
travel(X,Y):- travel(X,Z), travel(Z,Y).
byAny(X,Y) :- byCar(X,Y) ; byTrain(X,Y) ; byPlane(X, Y). travel(X,Y) :- closure(byAny,X,Y).
См. это дляclosure/3
- person false   schedule 12.08.2020