List prolog,我有结构列表如何提取数据并返回其他结构的新列表?

List prolog,我有结构列表如何提取数据并返回其他结构的新列表?,list,prolog,List,Prolog,我在prolog中实现了家庭程序,但在实现一些规则时遇到了问题 首先,我实施这条规则: number_of_children_couple(_list):- findall(children(_f,_m,_n),children(_f,_m,_n),_list). 退货清单: 19 ?- number_of_children_couple(_list). _list = [children(mordechai, miriam, 1), children(salax, naima, 1),

我在prolog中实现了家庭程序,但在实现一些规则时遇到了问题

首先,我实施这条规则:

number_of_children_couple(_list):-
   findall(children(_f,_m,_n),children(_f,_m,_n),_list).
退货清单:

19 ?- number_of_children_couple(_list).
_list = [children(mordechai, miriam, 1), children(salax, naima, 1), children(eli, bella, 2), children(..., ..., ...)|...].
我的问题是如何实施:

number_of_children_person(_list28,list_person):-
第一个论点:

_list28 = _list  //the above list ,that return from the rule
第二个论点是:

list_person = [children(mordechai, 1), children(salax, 1),children(eli, 2),children(..., ...)|...]
我还使用了:

%_num is number of children for couple
children(_father,_mother,_num):-
   couple(_mother,_father),
   findall(_child,parents(_mother,_father,_child),_children),
   length1(_children,_num).
%_num是_person的子项数

children(_person,_num):-
   gender(_person,_),
   findall(_child,parent(_person,_child),_list),
   length1(_list,_num).
如果您想从children/3结构中删除一个参数,可以通过多种方式完成,最简单的是

number_of_children_person([],[]).
number_of_children_person([children(A,_,C)|R],[children(A,C)|T]) :-
   number_of_children_person(R,T).
或者更简洁地说

number_of_children_person(L3,L2) :-
  findall(children(A,C), member(children(A,B,C),L3), L2).

从findall/3开始绝对不是一个好主意。把《序言艺术》看作是一篇很好的介绍性文章,但我也希望在列表L2 childrenB,C中不仅包括childrenA,我想到这样的事情:“孩子的数量”3,L2:-“findallchildrenA,C,memberchildrenA,B、 C,L3,L4,findallchildrenB,C,memberchildrenA,B,C,L3,L5,concL4,L5,L2。