Rekurzívne prechádzame zoznam, kým nenájdeme jeho koniec, alebo nulu. Výhodné je použiť pomocný argument, v ktorom si počítame hĺbku vnorenia. Keď nájdeme nulu vypíšeme hĺbku (miesto prvej nuly v zozname). Keď dorazíme na koniec (t.j. nulu sme nenašli) vrátime NIL.


; Indexujeme od 1.
; Ak by v zozname boli len atómy, stačí pre porovnanie
; eq, ak len čísla stačí =.
; Keďže sa má vracať NIL, je vhodné použiť pomocný argument.
; Ten budeme inicializovať na 1.

(defun poz0pom (c zoz)
 (cond ((null zoz) NIL)
       ((eq 0 (first zoz)) c)
       (T (poz0pom (+ c 1) (rest zoz)))
 )
)

; Hlavná fnukcia.
(defun poz0 (zoz)
 (poz0pom 1 zoz)
)

; Príklady:
(poz0 '(1 2 3)) -> NIL
(poz0 '(1 0 2)) -> 2

 


Autori[ ZADANIE | AKO ZAČAŤ | RIEŠENIE ]
Posledná aktualizácia 4. 9. 2001
back  home  next