Jednoduchým riešením je implementovať funkciu zisťujúcu počet prvkov zoznamu. A potom zavolať funkciu "bezk" z príkladu bezk., ktorá vracia zoznam bez prvých p prvkov. Keď má náš zoznam n prvkov tak bezk zavoláme s argumentom počtu prvkov p=(n-k).


; Funkcia vracajúca počet prvkov zoznamu.

(defun pocet (zoz)
 (cond ((null zoz) 0)
       (T (+ 1 (pocet (rest zoz))))
 )
)

; Funkcia vracajúca zoznam bez prvých k prvkov.
; Z príkladu bezk.

(defun bezk (k zoz)
 (cond ((null zoz) NIL)
       ((<= k 0) zoz)
       (T (bezk (- k 1) (rest zoz)))
 )
)

; Hlavná funkcia.

(defun restk (k zoz)
 (bezk (- (pocet zoz) k) zoz)
)

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

 


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