【问题标题】:distance between two points in prologprolog中两点之间的距离
【发布时间】:2015-05-13 05:01:40
【问题描述】:

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

【问题讨论】:

    标签: prolog


    【解决方案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)
    

    并不总是指左侧。

    【讨论】:

      【解决方案2】:

      我试过了:

      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.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-12
        • 2019-01-23
        • 2012-07-17
        • 1970-01-01
        • 1970-01-01
        • 2019-09-16
        • 2010-10-30
        相关资源
        最近更新 更多