PROLOG, sumowanie elementów listy

PROLOG, sumowanie elementów listy
BO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
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 ?:)

Kopiuj
 policz(_,[],0) :- !.
policz(A,[A|T],N) :- !, policz(A,T,N1), N is N1 + 1.
policz(A,[_|T],N) :- policz(A,T,N).
msm
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
count(_, [], 0) :- !.
count(A, [X|T], N) :- (X is A, I is 1 ; I is 0), !, count(A, T, N1), N is N1 + I.
BO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
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

msm
  • Rejestracja: dni
  • Ostatnio: dni
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:

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.