从列表列表中的术语添加元素



我想递归地将元素添加到数据库中的列表列表中。

employee(1, max, 1500).
employee(2, peter, 2100).
employee(3, tom, 3900).

bigearners([]).
bigearners( [Head|Lists]):- employee(Id,Name,Salary), append([Id,Name,Salary],[], Head), bigearners(Lists).

他创建了这样的列表:[[1, max, 1500], [1, max, 1500], [1, max, 1500],但我想要[[1, max, 1500], [2, peter, 2100], [3, tom, 3900]].我想以递归的方式是不可能的吗?我找不到非递归的解决方案。

提前谢谢你!

使用像findall/3这样的内置函数

bigearners(L) :- findall([A,B,C], employee(A,B,C), L).

或使用累加器:

bigearners(L) :- bigearners([],L), !.
bigearners(S,L) :-
 employee(A,B,C),
 H=[A,B,C],
 + memberchk(H,S),
 bigearners([H|S],L).
bigearners(L,L).

PS:append([Id,Name,Salary],[], Head)通常写得像Head = [Id,Name,Salary]

最新更新