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

PROLOG家谱代码无法输出全部兄弟姐妹及堂表亲的问题咨询

问题修复方案

一、规则逻辑修正

你当前定义的sibling/2规则存在逻辑漏洞:未排除查询个体等于自身的无效匹配,会先返回X = tim的错误结果,修改后的规则如下:

sibling(X, Y) :-
    parent(Z, X),
    parent(Z, Y),
    X \= Y. % 新增约束:保证两个个体不是同一个人

cousin/2规则本身逻辑没有问题,不需要修改。

二、查询回溯操作说明

你只看到第一个返回结果,是因为不了解Prolog的查询交互规则:
Prolog返回第一个匹配结果后会进入等待状态,此时输入半角分号;即可触发回溯,查询下一个符合条件的结果;如果输入半角句号.则会直接终止查询。

三、结果验证

按上述修改后执行查询:

  1. 执行 ?- sibling(X, tim).,连续输入;可依次得到全部正确结果:
    X = amy ;
    X = john.
    
  2. 执行 ?- cousin(ben, X).,连续输入;可依次得到全部正确结果:
    X = grace ;
    X = anna.
    

如果需要一次性获取所有匹配结果,可以使用setof/3聚合查询:

  • 查tim的所有兄弟姐妹:?- setof(X, sibling(X, tim), Siblings).,直接返回 Siblings = [amy, john]
  • 查ben的所有堂表亲:?- setof(X, cousin(ben, X), Cousins).,直接返回 Cousins = [anna, grace]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:18:00