PROLOG, sumowanie elementów listy

0

Mam piękną funkcję która zlicza ilość wystąpień wskazanego elementu na liście. Mój problem polega na tym, że dostałem polecenie skrócenia jej o jedną linijkę i nie potrafię tego ugryźć. Pomożecie ?:)

 policz(_,[],0) :- !.
policz(A,[A|T],N) :- !, policz(A,T,N1), N is N1 + 1.
policz(A,[_|T],N) :- policz(A,T,N).
0

Może coś w tym rodzaju (nie jest to ładny kod ale chodzi o pomysł):

count(_, [], 0) :- !.
count(A, [X|T], N) :- (X is A, I is 1 ; I is 0), !, count(A, T, N1), N is N1 + I.
0

Dzięki wielkie za zainteresowanie, ale ten kod coś nie bangla :(

4 ?- count(a, [a,b,c,d,e,a,a,a,e,g,d], N).
ERROR: is/2: Arithmetic: `a/0' is not a function

0

No tak, napisałem i sprawdziłem działanie dla liczb (a is a. nie zadziała, miało być a = a. Ale zmienienie tego żeby działało nie wymaga jakichś wielkich sztuczek:

count(_, [], 0) :- !.
count(A, [X|T], N) :- (X = A, I is 1 ; I is 0), !, count(A, T, N1), N is N1 + I.

1 użytkowników online, w tym zalogowanych: 0, gości: 1