Ваша реализация на самом деле не эквивалентна версии C, которую вы показываете.
Вот ваш текущий код:
(E < W , C < Max) -> writeln('Increment C') ;
writeln('C unchanging') ;
(E > W , C > Min) -> writeln('Decrement C') ;
writeln('Error').
Пролог рассматривает это как серию из четырех предложений, связанных логической дизъюнкцией (ИЛИ - ;
). Если первое ->
выражение терпит неудачу, оно вызывает следующее дизъюнктивное выражение writeln('C unchanging')
. Приведенный выше код примерно эквивалентен:
if E < W and C < Max then
print('increment C')
else
print('C unchanging')
if E > W and C > Min then
print('decrement C')
else
print('error')
Пролог, эквивалентный вашему исходному псевдокоду:
( E < W
-> ( C < Max
-> writeln('increment C')
; writeln('C unchanging')
)
) ;
( E > W
-> ( C > Min
-> writeln('decrement C')
; writeln('Error')
)
)
В Прологе такое поведение работает как псевдокод, так как ->
исключает точку выбора, если она успешна, и Пролог не будет возвращаться.