我想以递归方式将元素添加到数据库中的列表列表中。
none
他创建了这样的列表: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]
。我想这不可能以递归的方式进行吗?我找不到一个非递归的解决方案。
提前谢谢!
答案 0 :(得分:0)
使用内置的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]