Max重复元素Prolog

时间:2016-06-07 09:04:36

标签: list prolog

让我说我有一些这样的事实

something(a,b,[1,2,3,4]).
something(c,b,[2,3]).
something(e,b,[1,3]).
something(b,a,[1,2]).
something(c,a,[3,4]).

现在我想找到哪个元素主要在列表中重复 在这种情况下

max_repeated = 3.
谢谢你的时间,我希望有人能帮助我

1 个答案:

答案 0 :(得分:0)

?- pred_key_count([K]>>(something(_,_,L),member(K,L)),T),aggregate(max(V,K),rb_in(K,V,T),max(V,K)).
K = 3,
...

有了这个定义:

:- meta_predicate pred_key_count(1,-).

pred_key_count(P,T) :-
    rb_empty(T),
    forall( call(P,K), %(something(_,_,L), member(K,L)),
        (   nb_rb_get_node(T,K,N)
        ->  nb_rb_node_value(N,C),
            D is C+1,
            nb_rb_set_node_value(N,D)
        ;   nb_rb_insert(T,K,1)
        )).