Prolog家庭关系规则实现咨询:恰好两子女、次子女、子女数<2的规则编写
问题1:恰好有2个子女的家长判断规则
你原有代码的问题是蕴含逻辑的写法不符合Prolog的语义,要实现「所有子女只能是A或B」的逻辑,需要用否定实现全称量化:不存在既不是A也不是B的第三个子女。
正确实现:
parent2Children(Prt) :- son(A, Prt), son(B, Prt), A \= B, \+ (son(Z, Prt), Z \= A, Z \= B).
问题2:次子女判断规则secondChild(X)
直接使用给定的基础谓词即可匹配你描述的逻辑:次子女的年长同胞就是家庭的最长子女,没有更年长的亲属。
正确实现:
secondChild(X) :- elder(E, X), eldest1(E).
问题3:子女数少于2的男性判断规则less2Child(Prt)
首先限定主体是男性,再分两种情况判断:无子女,或者只有1个子女。无子女的逻辑可以用否定子查询实现。
正确实现:
less2Child(Prt) :- male(Prt), ( \+ son(_, Prt) ; % 无子女的情况 (son(A, Prt), \+ (son(Z, Prt), Z \= A)) ). % 仅有1个子女的情况,不存在第二个不同的子女
内容的提问来源于stack exchange,提问作者adlofMerlin
相关产品推荐
相关产品推荐

