2016-05-30 64 views
1

我想從數據庫中遞歸添加列表到列表列表中。prolog - 從列表列表中添加元素

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]]。我想這是不可能的遞歸方式?我找不到一個不可遞歸的解決方案。

預先感謝您!

回答

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]

+0

謝謝你,第二個解決方案對我的作品! – StephanEr