用于计算两点之间距离的毕达哥拉斯定理。序言

Pythagorean theorem for calculating distance between two points. Prolog

我们都知道勾股定理公式是:a2 + b2 = c2。我想实现这个公式,用于计算两点之间的距离。这是我的城市坐标数据(以公里为单位):

city(amsterdam, 121.813/487.362).
city(breda, 112.095/398.291).
city(eindhoven, 161.871/382.839).
city(groningen, 233.871/582.030).
city(haarlem, 103.690/488.416).
city(hertogenbosch, 149.225/412.119).
city(leeuwarden, 182.605/583.855).
city(maastricht, 176.830/318.793).
city(rotterdam, 92.548/437.734).
city(utrecht, 135.923/456.419).
city(zwolle, 203.252/503.130).

我为此实施了一个程序,但它似乎不起作用:

estimate(State/NextState, Estimate) :-
    city(State, X/Y),
    city(NextState, X1/Y1),
    X2 is X1 - X,
    Y2 is Y1 - Y,
    Estimate is X2^2 + Y2^2,
    DifferentVar is sqrt(Estimate),
    estimate(State/NextState, DifferentVar).

如果查询类似这样它 returns false:

?- estimate(amsterdam/utrecht, X).
false.

?- estimate(utrecht/amsterdam, X).
false.

这个我也试过了,但是不行:

estimate(State/NextState, Estimate) :-
    city(State, X/Y),
    city(NextState, X1/Y1),
    Estimate is sqrt((X1 - X)^2 + sqrt(Y1 - Y)^2).

我检查了每一个 'subgoal',我找不到错误或错误的实现。在我看来,每个 'subgoal' 都达到了,但它仍然是 returns 错误。如果有人能进一步帮助我,我将不胜感激!

估计规则应该是:

estimate(State/NextState, Estimate) :-
    city(State, X/Y),
    city(NextState, X1/Y1),
    X2 is X1 - X,
    Y2 is Y1 - Y,
    Estimate is sqrt(X2^2 + Y2^2).

请注意,只有最后一行发生了变化(接下来的 2 行被删除了)。