Prolog递归头尾

时间:2016-10-22 22:43:03

标签: recursion prolog

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

这是我到目前为止所得到的:

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

0 个答案:

没有答案