Я использую SWI для Windows и пробую выполнить упражнение в Learn Prolog Now!
travel(Start,Dest,X) :- (byCar(Start,Dest); byTrain(Start,Dest); byPlane(Start,Dest)), X = go(Start,Dest).
В этом коде, если вы можете получить доступ к Dest из Start, Prolog говорит:
правда.
X = go (Start, Dest)..
и просто говорит ложь иначе.
Однако в этом коде, когда я удалил круглые скобки, он говорит только «истина», если она действительна, и «ложь», если она недействительна. Ответ правильный, но почему он не выводит X?
travel(Start,Dest,X) :- byCar(Start,Dest); byTrain(Start,Dest); byPlane(Start,Dest), X = go(Start,Dest).
Это из-за приоритета оператора, в котором сначала вычисляется AND? Даже если это так, разве X не должен быть равным (Start, Dest)?
Меня смущает то, как Prolog присваивает значения переменным.
Источник: