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

Prolog技术问询:如何创建isPoor逆谓词以获取所有绑定

实现Prolog中的isPoor/1谓词(isRich/1的逆谓词)

没问题,我来帮你一步步搞定这个需求~

首先先回顾我们现有的Prolog事实,这些用来记录每个人拥有的金额:

% 穷人对应的金额事实
owns(luke,1).
owns(maria,3).
owns(sara,5).
owns(mike,9).
% 富人对应的金额事实
owns(barbara,10).
owns(paula,11).
owns(thierry,19).

已经定义好的isRich/1谓词用来判断谁是富人,逻辑很直白——只要某人拥有的金额大于等于10就算富人:

% 判断富人的谓词
isRich(P) :- owns(P,M), M >= 10.

当你在Prolog环境中查询?- isRich(X)时,会得到所有富人的绑定结果:

X = barbara ;
X = paula ;
X = thierry.

接下来我们要实现逆谓词isPoor/1,用来筛选出所有穷人。逻辑刚好和isRich相反——只要某人拥有的金额小于10就算穷人,代码如下:

% 判断穷人的谓词(isRich的逆谓词)
isPoor(P) :- owns(P,M), M < 10.

现在测试一下这个谓词,在Prolog中调用?- isPoor(X),就能得到所有穷人的绑定结果:

X = luke ;
X = maria ;
X = sara ;
X = mike.

这样isPoor就完美实现了和isRich的互斥逻辑,覆盖了所有已有的owns事实里的人物~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:59:58