我想递归地将元素添加到数据库中的列表列表中。
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]