Podobne ako v príkladoch vlozza a zrusn. Prechádzame zoznam, vytvárame výstupný zoznam a počítame prvky (rekurzívne volania zo stále menším k), keď je k rovné 0 vieme, že sme už skopírovali k prvkov (resp. že sme z pôvodného zoznamu už vytvorili výstupný zoznam dĺžky k). Výstupný zoznam uzavrieme (vrátime NIL) a skončíme.


; Ak bude k > počet prvkov zoznamu, vráti sa pôvodný zoznam.
; Ak máme zaručené, že k <= počet prvkov zoznamu, môžeme
; prvú vetvu z cond ((null zoz) NIL) vynechať.
(defun firstk (k zoz)
 (cond ((null zoz) NIL)
       ((= k 0) NIL)
       (T (cons (first zoz) (firstk (- k 1) (rest zoz))))
 )
)

; Príklady:
(firstk 2 '(a b c)) ; -> (a b)
(firstk 0 '(a b c)) ; -> NIL
(firstk 7 '(a b c)) ; -> (a b c)

 


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