Prolog,过滤重复项,同时保持列表顺序

时间:2018-03-24 17:52:25

标签: prolog

我正在尝试制定名为var formdata="lat="+$('#lat').text()+'&lon='+$('#lon').text(); $.ajax({ type: 'POST', url: 'save_location.php', data: formdata, async: false, }).done(function(data) { alert(data) }); 的规则,supressEcho(A, B)是带有重复项的列表,A是列表没有。使用sort,删除重复项,但它也按alpha顺序对它们进行排序。到目前为止有什么:

B

这将返回没有重复的列表,但是以相反的顺序返回,因为在前面添加新的非重复。如何添加到我的列表末尾或者应该supressEchos([],[]) :-!. supressEchos(A,B) :- supressHelp(A, [], B). supressHelp([], A, A) :- !. supressHelp([A | Tail],List, B) :- member(A,List), supressHelp(Tail, List, B),!. supressHelp([A | Tail],List, B) :- supressHelp(Tail,[A|List], B), !. 来帮助?

reverse(A,B)

返回supressEcho([a,a,a,b,b,c],X)

2 个答案:

答案 0 :(得分:1)

有一个(已弃用的)谓词delete / 3可能会有所帮助:

supressEchos([],[]).
supressEchos([A|Tail],[A|B]) :-
    delete(Tail,A,R),
    supressEchos(R,B).

答案 1 :(得分:0)

%%The answer to my issue was to implement reverse(A,B).  
reverse([],A,A) :- !.  
reverse([A|Tail],B, C) :- reverse(Tail, [A|B], C).  
supressEchos([],[]) :-!.  
supressEchos(A,B) :- supressHelp(A, [], B).  

supressHelp([], A, B) :- reverse(A,B).  
supressHelp([A | Tail],List, B) :-  
member(A,List),
supressHelp(Tail, List, B),!.
supressHelp([A | Tail],List, B) :-
supressHelp(Tail,[A|List], B), !.  

有一种更好的方法来实现这一点,但如果有人需要快速修复,那么就去吧。