我必须查询数据库,找到至少有两个兄弟姐妹的孩子的兄弟姐妹,并打印他们父母的姓名。
这是我到目前为止所得到的:
queryQuestion3(Year,FatherName,MotherName):-
family(person(FatherName,_,_,_),
person(MotherName,_,_,_),
[person(Name,Surname,date(_,_,Year),_),_,_|_])
; family(person(FatherName,_,_,_),
person(MotherName,_,_,_),
[_,person(Name,Surname,date(_,_,Year),_),_|_])
; family(person(FatherName,_,_,_),
person(MotherName,_,_,_),
[_,_,person(Name,Surname,date(_,_,Year),_)|_]).
这是有效的,它给了我父母的名字,但它只给了我前三个兄弟姐妹,我必须处理大于没有硬编码的家庭。 我可以想象答案将使用递归,从第一个兄弟开始并迭代它们,直到你到达最后一个,基本情况,然后继续前进到下一个家庭,但我是Prolog的新手,我不太确定如何有效地使用尾部和头部递归来实现这一点。
*更新#2 *
感谢您的回复。 这是现在的代码。
queryQuestion3(Year,FatherName,MotherName):-
family(person(FatherName,_,_,_),person(MotherName,_,_,_), Children),
member(person(_,_,date(_,_,Year),_), Children).