我正在尝试在 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).
最佳答案
您正在定义 distance
在 distance
方面.一旦有 distance
的查询,电脑会叫distance
,它将再次调用 distance
,等等。这被称为 infinite recursion .
另见 this SO question .
您应该更改您的代码,以便右侧
distance(N1,N2,D):-distance(point(N1,X1,Y2),point(N2,X2,Y2),Z)
并不总是指左侧。
关于prolog - 序言中两点之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30206059/