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

 


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