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