Prolog中定义son规则的更简洁实现方式
你可以通过Prolog的析取运算符;直接合并两条规则的分支逻辑,不需要新增额外规则,合并后的写法如下:
% Son son(X, Y) :- male(X), (father(Y, X); mother(Y, X)).
说明
- 括号用于明确逻辑优先级,保证先完成
male(X)的校验,再依次尝试匹配father(Y, X)和mother(Y, X),完全符合你期望的执行顺序:先判定X为男性,再依次校验Y是父亲、母亲的条件。 - 该写法和你原本拆分的两条规则语义完全等价,不会改变查询的返回结果,后续如果需要新增其他父/母类的亲属判定,也只需要在括号内新增析取分支即可,不用重复编写
male(X)判断。
内容的提问来源于stack exchange,提问作者Erik Kammerfors
相关产品推荐
相关产品推荐

