在数据中,我有gender(_name,_gender)
和parent(_parent,_child)
的基本事实,
我也实施其他规则。
我该如何实施这条规则:
has_child_from_one_woman(_person):-
我这样做
has_child_from_one_woman(_person) :-
parents(_mom,_person,_),
not(parents(_other_mom,_person,__)),
not(_mom \= _other_mom).
这是真的吗? 父母的第三个参数是下划线
parents(_mother,_father,_child) :-
mother(_mother,_child),
father(_father,_child).
答案 0 :(得分:1)
如果一个女儿的父母至少有一个女性,并且没有其他孩子有另一个女人作为他/她的母亲,那么只有一个女人的孩子。把它翻译成Prolog ......
has_children_from_one_woman(Man):-
parent(Man, Child),
parent(Woman, Child),
gender(Woman, female),
dif(Woman, Man),
\+ (parent(Man, Child1),
parent(Woman1, Child1),
gender(Woman1, female),
dif(Woman1, Man),
dif(Woman1, Woman)).
如果同一个Man
多次,如果他与该女性有一个以上的孩子,则上述规则得到满足。你可以在最后放一个切口以避免这种情况。
此外,您可以使用setof/3
获取至少有一个Man
个孩子的所有女性的列表,并检查该列表中是否只有一个元素。
has_children_from_one_woman(Man):-
setof(Woman,
Child^(parent(Man, Child),
parent(Woman, Child),
gender(Woman, female),
dif(Woman, Man)),
[_]).