Recursion Prolog递归头和尾

Recursion Prolog递归头和尾,recursion,prolog,Recursion,Prolog,我必须查询一个数据库,找到至少有两个兄弟姐妹的孩子的兄弟姐妹,并打印他们父母的名字 到目前为止,我得到的是: queryQuestion3(Year,FatherName,MotherName):- family(person(FatherName,_,_,_), person(MotherName,_,_,_), [person(Name,Surname,date(_,_,Year),_),_,_|_]) ; family

我必须查询一个数据库,找到至少有两个兄弟姐妹的孩子的兄弟姐妹,并打印他们父母的名字

到目前为止,我得到的是:

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).

家庭(人(父名,,,,,,,,,,_),人(母名
顺便说一句,
姓名
姓氏
与您无关!…在您的问题陈述中,您根本没有提到
年份
。抱歉,我只是注意到我没有提到我必须包括所有兄弟姐妹的出生年份以及父母的姓名。感谢您注意到姓名和姓氏!您的同事de非常有用,它确实列出了所有兄弟姐妹的出生年份和所有父母的姓名,但现在它包括了所有有两个以下孩子的家庭。每当我尝试更改它时,我总是得到一个无限循环。新代码如上所示。我看不出哪里应该有无限循环。可能您的数据不一致。添加t他的目标是将家庭限制在3个或3个以上(人(父亲姓名),人(母亲姓名),孩子),成员(人(,日期(,年),)顺便说一句,
姓名
姓氏
与您无关!…在您的问题陈述中,您根本没有提到
年份
。抱歉,我只是注意到我没有提到我必须包括所有兄弟姐妹的出生年份以及父母的姓名。感谢您注意到姓名和姓氏!您的同事de非常有用,它确实列出了所有兄弟姐妹的出生年份和所有父母的姓名,但现在它包括了所有有两个以下孩子的家庭。每当我尝试更改它时,我总是得到一个无限循环。新代码如上所示。我看不出哪里应该有无限循环。可能您的数据不一致。添加t他的目标是将儿童人数限制在3人或3人以上