SWI Prolog-语法错误,操作员优先级冲突

时间:2017-11-30 04:30:43

标签: prolog

我试图创建一个检查方块是否与矩形相交的函数。我有多个测试用例,只显示第一个测试用例,但即使对于第一个测试用例,我仍然会遇到一个"运营商优先级冲突"错误。这导致每个案例都返回为false,即使我仔细检查了我的数学并且它应该在第一种情况下返回true。我做错了什么?

intersect(
      square(point2d(X1,Y1),LENGTH),
      rectangle(point2d(X2,Y2),point2d(X3,Y3))) :-
   X1 =< X2 =< (X1 + LENGTH),
   (Y1-LENGTH) =< Y2 =< Y1.

1 个答案:

答案 0 :(得分:1)

算术运算符行为不是特定于SWI-Prolog。正如您所料,它们是二进制构建的谓词,将其参数作为算术表达式进行评估。

您必须明确范围检查:例如

intersect(
  square(point2d(X1,Y1),LENGTH),
  rectangle(point2d(X2,Y2),point2d(X3,Y3))
) :-
  X1 =< X2, X2 =< (X1 + LENGTH), (Y1-LENGTH) =< Y2, Y2 =< Y1.