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

时间:2016-05-30 23:46:11

标签: database prolog

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

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]。我想这不可能以递归的方式进行吗?我找不到一个非递归的解决方案。

提前谢谢!

1 个答案:

答案 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]