prolog - 序言中两点之间的距离

标签 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).

最佳答案

您正在定义 distancedistance 方面.一旦有 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/

相关文章:

prolog - 自定义 DCG 运算符

prolog - 如何在 SWI-Prolog 中复制预定义长度/2 的行为?

prolog - findall/3 返回一个空列表而不是解决方案

prolog - Prolog 总是重新评估规则吗?

列表树(更新)

list - 测试 L 是否是有效的 Prolog 列表

list - prolog 使用循环中的变量自动填充列表

parsing - 创建能够在 Prolog 中解析树的 DCG

list - 按字典顺序创建值对 0 到 n-1 的列表

prolog - NU-Prolog 和 Gödel 的逻辑和声音 `if-then-else` 扩展