使用';不是';Eclipse Prolog中的运算符
我有一个规则来计算两点之间的距离使用';不是';Eclipse Prolog中的运算符,prolog,operators,Prolog,Operators,我有一个规则来计算两点之间的距离 distance(X1,Y1,X2,Y2,D) :- at(Car1,X1,Y1), at(Car2,X2,Y2), not(X1=X2),not(Y1=Y2), D is sqrt((X2 - X1)*(X2 - X1) + (Y2 - Y1)*(Y2 - Y1)). 这个很好用。操作不能完全按照预期工作。但后来我有了这个规则 canTurnLeft(Car,X,Y) :- at(Car,X,Y), light(green,X,Y), not(distanc
distance(X1,Y1,X2,Y2,D) :- at(Car1,X1,Y1), at(Car2,X2,Y2), not(X1=X2),not(Y1=Y2), D is sqrt((X2 - X1)*(X2 - X1) + (Y2 - Y1)*(Y2 - Y1)).
这个很好用。操作不能完全按照预期工作。但后来我有了这个规则
canTurnLeft(Car,X,Y) :- at(Car,X,Y), light(green,X,Y), not(distance(X,Y,A,B,D), D < 80, oppDir(X,Y,A,B)).
canturnlight(Car,X,Y):-at(Car,X,Y),light(绿色,X,Y),not(距离(X,Y,A,B,D),D<80,oppDir(X,Y,A,B))。
它会说“调用一个未定义的过程不是(…)
不能在多个and上使用not运算符吗?如果没有,如果在80个单位内有任何车辆朝相反方向行驶,我如何返回false
Prolog是新手,因此任何帮助都是非常感谢的。谢谢
不是/1
接受一个参数。但是在你的第二个例子中有三个论点。尝试将三个参数括在括号中:
canTurnLeft(Car,X,Y) :-
at(Car,X,Y),
light(green,X,Y),
not((distance(X,Y,A,B,D), D < 80, oppDir(X,Y,A,B))).
not/1
已弃用。改用标准的\+/1
运算符/内置控件结构。@hakank给出的建议同样适用。@hakank:当问题有效地应用于任何序言时,请删除特定于实现的标记。这里使用(\+)/1
。
X = 3, not((X = 2, X = 4)).