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

寻找满足“A is B.”为假、“A =:= B.”为真的Prolog项A和B及示例

满足条件的Prolog项示例

首先明确两个谓词的核心区别:

  • is/2:要求第一个参数是变量或数值常量,若为变量则将第二个参数的算术求值结果绑定给它;若为数值常量则检查该数值是否等于第二个参数的求值结果;若第一个参数是其他类型的项(如未求值的算术复合项),则直接失败返回假。
  • =:=/2:分别对左右两个参数进行算术求值,再比较结果是否相等,支持任意可算术求值的项作为参数。

符合要求的示例

先绑定变量:

X = 2, Y = 3.

此时:

  1. 执行 (X+1) is Y. → 返回假,因为X+1是复合项+(2,1),不是变量或数值常量,不符合is/2的第一个参数要求,因此执行失败。
  2. 执行 (X+1) =:= Y. → 返回真,因为=:=/2会分别求值左右两边:左边X+1计算为3,右边Y的值是3,二者相等。

另一个更简洁的示例:

  • 执行 (1+2) is 3. → 返回假(部分Prolog实现会抛出类型错误,但标准Prolog中此情况属于执行失败)
  • 执行 (1+2) =:= 3. → 返回真,因为两边求值结果均为3。

关于你提供的代码片段说明

你给出的代码存在语法错误,修正后如下:

% 事实定义
fruit('mango').
fruit('apple').

% 约束X和Y对应的fruit项不同
dif(fruit(X), fruit(Y)).

% 直接比较两个fruit项不相等
fruit(X) \= fruit(Y).
  • dif/2是延迟约束,会在后续变量绑定后检查两个项是否不同,不会立即失败;
  • \=/2是立即比较,若X或Y未绑定,会直接返回假(因为无法确定两个项是否不同)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:10:29