【发布时间】:2010-11-28 00:29:49
【问题描述】:
我正在尝试查找最常见的列表项 common([b,a,a,a,c,d,b,f,s,f,s,f,s,f,s,f,f ],R) 所以结果应该是 R=f, 我在想如果我们拿列表,到列表末尾取 el=b ,num1=1 然后回到开头并比较 if b=b ,num1=num1+1 else a!=b then if num2 =num2+1 , num1>num2 recursion else el=a 或类似的东西,但我在将其转换为 Prolog 时遇到了一些困难。
insert_sort 对列表进行排序,但出于一些有趣的原因,如果我使用 las(X,Y)(我会覆盖原来的 last/2),如果我使用 last(X,Y),我会得到 4-a,我只会得到一个...
most_common([X|Y],J):-
insert_sort([X|Y],[R|Rs]),
count_runs([R|Rs],G),
las(G,J).
las([N-Y],Y).
las([_|T],Y):- las(T,Y).
las([_|Tail], Y) :- las(Tail, Y).
insert_sort(List,Sorted):-
i_sort(List,[],Sorted).
i_sort([],Acc,Acc).
i_sort([H|T],Acc,Sorted):-
insert(H,Acc,NAcc),
i_sort(T,NAcc,Sorted).
insert(X,[],[X]).
insert(X,[Y|T],[Y|NT]):- X @> Y, insert(X,T,NT).
insert(X,[Y|T],[X,Y|T]):- X @=< Y.
【问题讨论】:
标签: prolog