Rekurzívne prechádzame zoznam, pričom argument k zmenšujeme, keď k je rovné 0, vieme, že sme prešli už k prvkov. Vrátime zoznam, ktorý nám ešte ostal. Samozrejme, že pri rekurzívnom prechádzaní zoznamu, zmenšujeme aj prechádzaný zoznam.
; Ak bude k > počet prvkov zoznamu, vráti sa prázdny zoznam.
; Ak máme zaručené, že k <= počet prvkov zoznamu, môžeme
; prvú vetvu z cond ((null zoz) NIL) vynechať.
; Pre porovnanie k by stačilo (= k 0), ale (<= k 0) je všeobecnejšie
; a pracuje vhodne aj pre záporne čísla, teda pri zápornom k sa
; vráti celý pôvodný zoznam. Takto implmentovaná funkcia sa dá použiť
; ako súčasť príkladu restk.
(defun bezk (k zoz)
(cond ((null zoz) NIL)
((<= k 0) zoz)
(T (bezk (- k 1) (rest zoz)))
)
)
; Príklady:
(bezk 2 '(a b c)) ; -> (c)
(bezk 0 '(a b c)) ; -> (a b c)
(bezk 7 '(a b c)) ; -> NIL