我对序言还很陌生,需要检查这些点是否使三角形等腰,但出现此错误。错误:没有足够实例化参数。我不确定自己做错了什么。
距离似乎很好,但问题是等腰。
/*Is the triangle isosceles?*/
isosceles(point2d(X1,Y1), point2d(X2,Y2), point2d(X3,Y3)):-
distance( point2d(X1,Y1), point2d(X2,Y2), D ) =:= distance( point2d(X2,Y2), point2d(X3,Y3), D );
distance( point2d(X2,Y2), point2d(X3,Y3), D ) =:= distance( point2d(X1,Y1), point2d(X3,Y3), D );
distance( point2d(X1,Y1), point2d(X3,Y3), D ) =:= distance( point2d(X1,Y1), point2d(X2,Y2), D ).
distance(point2d(X1,Y1), point2d(X2,Y2), D):-
D is sqrt((X2 - X1)^2 + (Y2 - Y1)^2).
?- isosceles(point2d(0,0), point2d(2,4), point2d(5,0)).
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [11] distance(point2d(0,0),point2d(2,4),_10064)=:=distance(point2d(2,4),point2d(5,0),_10084)
ERROR: [10] isosceles(point2d(0,0),point2d(2,4),point2d(5,0)) at /home/checkman123/prolog-geometry/threepoints.pl:25
ERROR: [9] <user>
编辑:所以我认为我可以使用它吗?通过使用来代替。我仍然想知道为什么=:=不起作用。
答案 0 :(得分:2)
在对重复计算进行因子分解后,David的意思是这样:
iso(point2d(X1,Y1), point2d(X2,Y2), point2d(X3,Y3)):-
distance( point2d(X1,Y1), point2d(X2,Y2), D12 ),
distance( point2d(X2,Y2), point2d(X3,Y3), D23 ),
distance( point2d(X1,Y1), point2d(X3,Y3), D13 ),
(D12 =:= D13; D23 =:= D13; D13 =:= D12).