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

如何在Prolog中判断某逻辑查询是否仅存在唯一解

符合要求的Prolog查询写法

原有查询问题分析

你编写的squared(x,25),squared(x,25), x=x.存在两个核心问题:

  • Prolog中首字母小写的x是常量而非变量,无法匹配不同的取值
  • 两次查询同一个变量的squared只会匹配同一组事实,无法统计不同解的数量

可用的正确查询

写法1:用findall统计解数量(无需额外依赖)

直接收集所有满足条件的解到列表,判断列表长度是否为1即可:

findall(X, squared(X, 25), [_]).

逻辑说明:findall(变量, 目标条件, 结果列表) 会把所有满足条件的变量取值存入结果列表,[_] 匹配长度为1的列表。当前你的知识库有2个解,结果列表为[5, -5],匹配失败返回no,符合预期;如果知识库仅保留1个符合条件的事实,就会匹配成功返回yes。

写法2:用否定逻辑判断无其他不同解

squared(X, 25), \+ (squared(Y, 25), Y \= X).

逻辑说明:先找到第一个符合条件的X,再判断不存在第二个和X取值不同的Y满足条件,等价于解唯一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:09:02