我试图在Prolog中编写代码来计算两点之间的距离,但是当我尝试执行它时,它告诉我超出本地堆栈 任何人都知道这意味着什么以及我如何解决它 这是我的代码:
point(a,5,2).
point(b,4,0).
point(c,2,3).
point(d,5,2).
distance(N1,N2,D) :-
distance(point(N1,X1,Y2),point(N2,X2,Y2),Z),
Z=sqrt(((X1-X2)*(X1-X2))+((Y1-Y2)*(Y1-Y2))).
line(N1,N2,D) :-
distance(N1,N2,Z).
tangent(X,Y,M) :-
tangent(point(N1,X1,Y2),point(N2,X2,Y2),M),
M=(Y1-Y2)/(X1-X2).
答案 0 :(得分:1)
您正在根据distance
定义distance
。在查询distance
后,计算机将调用distance
,再次调用distance
,依此类推。这称为infinite recursion。
您应该更改代码以便
的右侧distance(N1,N2,D):-distance(point(N1,X1,Y2),point(N2,X2,Y2),Z)
并不总是指左侧。
答案 1 :(得分:1)
我试过了:
distance(N1,N2,D) :- point(N1,X1,Y1),
point(N2,X2,Y2),
D is sqrt((X2-X1)^2 + (Y2-Y1)^2).
离。
?- distance(a,b,D).
D = 2.23606797749979.