序言中两点之间的距离

时间:2015-05-13 05:01:41

标签: prolog

我试图在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).

2 个答案:

答案 0 :(得分:1)

您正在根据distance定义distance。在查询distance后,计算机将调用distance,再次调用distance,依此类推。这称为infinite recursion

另见this SO question

您应该更改代码以便

的右侧
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.