Я пишу небольшой интерпретатор на SWI Prolog и столкнулся со следующей проблемой: мне нужно написать предикат, который будет определять истинность логического выражения. у меня уже есть предикат
evaluate_arithmetic_expression(+Expr, +State, -Value)
который оценивал арифметическое выражение в заданном состоянии. Теперь мне нужен предикат для логических выражений:
is_logical_expression(+Expr, +State)
Следующий пункт, похоже, работает нормально:
is_logical_expression_true(Expr1 = Expr2, State) :-
evaluate_arithmetic_expression(Expr1, State, Value1),
evaluate_arithmetic_expression(Expr2, State, Value2),
Value1 =:= Value2.
Но это не скомпилируется:
is_logical_expression_true(Expr1 <> Expr2, State) :-
evaluate_arithmetic_expression(Expr1, State, Value1),
evaluate_arithmetic_expression(Expr2, State, Value2),
Value1 =\= Value2.
И я получаю ошибку:
Syntax error: Operator expected
Похоже, что оператор <> привязывается сложнее, чем что-либо еще, но я не думаю, что <> вообще является оператором в SWI. Как я могу это исправить?





Пользовательские операторы должны быть объявлены с использованием предиката ISO op/3:
:- op(700, xfx, (<>)).
Нет необходимости в дополнительных круглых скобках.
:- op(700, xfx, <>).достаточно.