You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prolog基于勾股定理计算城市间距离代码报错求排查

Prolog勾股定理计算城市距离错误排查

两个版本代码的错误原因

第一个版本错误点

  • 存在无终止条件的无限递归:代码最后一行再次调用estimate(State/NextState, DifferentVar),完全没有递归边界,会无限循环调用自身,最终导致匹配失败返回false
  • 变量赋值逻辑错误:你将坐标差的平方和赋值给了谓词输出参数Estimate,后续算出的距离值DifferentVar没有绑定到输出参数上,就算没有递归,返回的也只是平方和而非直线距离
  • 逻辑冗余:计算两点直线距离不需要递归,直接完成算术运算返回结果即可

第二个版本错误点

  • 公式书写错误:勾股定理应为 sqrt( (x1-x2)^2 + (y1-y2)^2 ),你对y坐标差额外多调用了一次sqrt,如果坐标差为负数,sqrt(负数)属于非法运算,会直接返回false导致整个谓词匹配失败

正确实现代码

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

测试结果

运行查询?- estimate(amsterdam/utrecht, X). 会返回正确结果:X ≈ 34.01 km

内容的提问来源于stack exchange,提问作者Hyakkimaru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:36:05