Witam,
próbuję zrobić zadanie o treści:
Napisz funkcję, która zlicza ilość wystąpień liczb podzielnych przez pięć na podanej liście.
I próbuję zrobić go rekurencyjnie na zasadzie (i - zmienna do zliczania):
- Sprawdzamy czy lista jest pusta.
Jeżeli tak to kończymy działanie programu i wypisujemy i.
Jeżeli nie to przechodzimy dalej. - Dzielimy listę na głowę i ogon.
- Sprawdzamy czy głowa jest podzielna przez 5.
Jeżeli tak to inkrementujemy zmienną (powiedzmy i) i
Jeżeli nie to przechodzimy dalej. - Wywołujemy od nową funkcję, tym razem z samym ogonem.
W teorii wszystko pięknie, ale nie bardzo wiem jak to teraz zrobić w Lispie.
Mam coś takiego:
(defun zliczanie (x)
(setq i 0)
(if (null x) i (if (= (mod (car x) 5) 0) (incf i)) (zliczanie (cdr x))))
I wszystko pewnie byłoby ok, gdyby nie to nieszczęsne
(setq i)
Nie wiem jak inaczej wprowadzić tą zmienną w Lispie, aby nie wykonywała się przy każdym wywołaniu funkcji. Próbowałem czegoś takiego:
(if (null i) (setq i 0))
No ale niestety nie pomogło.
Mógłby mi ktoś poradzić coś na temat? Nie mogę wpaść na pomysł jak to zrobić inaczej.