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

为何查询distance(c2,c5,X-0,1)无法匹配知识库中的20?

为什么Prolog查询中X-0无法匹配事实中的20?

你的问题核心在于对Prolog的合一(匹配)机制理解有误:

  • 当你在查询中写distance(c2, c5, X-0, 1)时,X-0并不是一个算术表达式,而是一个复合项——它的结构是「函子为-,第一个参数是变量X,第二个参数是常量0」。
  • 而你知识库中的事实是distance(c2, c5, 20, 1),这里的第三个参数是一个整数常量20,和X-0的结构完全不同,所以Prolog无法将两者合一,返回false。

Prolog只有在特定算术上下文中(比如is/2谓词、CLP(FD)约束、算术比较符=:=等),才会把-当作减法运算符进行数值计算。要实现你想要的效果,需要显式触发算术运算:

方法1:使用is/2谓词

distance(c2, c5, D, 1), X is D - 0.

这里先匹配事实中的D=20,再通过X is D-0计算出X=20。

方法2:使用CLP(FD)约束(适用于支持的Prolog,如SWI-Prolog)

distance(c2, c5, D, 1), X #= D - 0.

CLP(FD)支持更灵活的算术约束,即使变量顺序调换也能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:05:21