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
相关产品推荐
相关产品推荐

