毕达哥拉斯定理用于计算两点之间的距离。序言
Posted
技术标签:
【中文标题】毕达哥拉斯定理用于计算两点之间的距离。序言【英文标题】:Pythagorean theorem for calculating distance between two points. Prolog 【发布时间】:2021-12-02 17:13:26 【问题描述】:我们都知道勾股定理的公式是: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).
如果这样的查询返回 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).
我检查了每个“子目标”,但找不到错误或错误的实现。在我看来,似乎每个“子目标”都已达到,但它仍然返回错误。如果有人能进一步帮助我,我将不胜感激!
【问题讨论】:
【参考方案1】:估计规则应该是:
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 行已被删除)。
【讨论】:
以上是关于毕达哥拉斯定理用于计算两点之间的距离。序言的主要内容,如果未能解决你的问题,请参考以下文章