Zoznam sa kopíruje do výsledku, pritom sa počítajú prvky, keď je na výstupe už n prvkov pôvodného zoznamu, vloží sa prvok a zvyšok zoznamu. Počítanie je výhodné robiť tak, že rekurzívne voláme funkciu zo zmenšujúcim sa n (- n 1) a keď je n rovné 0 vieme, že už sme za n-tým prvkom pôvodného zoznamu.


; Prvý prvok má index 1.
; Ak bude n>počet prvkov zoznamu, aplikuje sa na ukončenie prvá vetva
; v cond a vráti sa zoznam rovnaký ako bol pôvodný.

(defun vlozza (n sv zoz)
 (cond ((null zoz) NIL)
       ((= n 0) (cons sv zoz))
       (T (cons (first zoz) (vlozza (- n 1) sv (rest zoz))))
 )
) 

; Príklady:
(vlozza 2 'x '(1 2 3)) ; -> (1 2 x 3)
(vlozza 7 'x '(1 2 3)) ; -> (1 2 3)

; Ak sa pokúsime s-výraz vložiť za nultý prvok, pridá sa správne
; na začiatok, pretože prvý prvok má index 1.
(vlozza 0 'x '(1 2 3)) ; -> (x 1 2 3)

 


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