Výhodné je implementovať funkciu, ktorá nahradí n-tý prvok zoznamu. Potom túto funkciu použijeme v hlavnej funkcií a nahradíme prvok v danom riadku poľa.
; Nahradí prvok určený súradnicami x, y (stĺpec, riadok)
; Nahradí v zozname prvok st za prv. Prvý prvok má index 0.
; Pri chybnom n vráti pôvodný zoznam.
(defun nahrad_prv (n prv zoz)
(cond ((null zoz) NIL)
((= n 0) (cons prv (rest zoz)))
(T (cons (first zoz) (nahrad_prv (- n 1) prv (rest zoz))))
)
)
Príklady:
(nahrad_prv 1 'x '(a b c)) -> (a x b)
(nahrad_prv 3 'x '(a b c)) -> (a b c)
; Prechádza riadky a nahradí v danom riadku daný prvok.
; Prvky indexujeme od 0. (0,0) = prvý stĺpec a prvý riadok.
; Pri chybnom stĺpci, alebo riadku vráti pôvodný zoznam.
; Hlavná funkcia.
(defun nahrad (st ri prv pole)
(cond ((null pole) NIL)
((= ri 0) (cons (nahrad_prv st prv (first pole)) (rest pole)))
(T (cons (first pole) (nahrad st (- ri 1) prv (rest pole))))
)
)
Príklady:
(nahrad 1 1 'x '((1 2 3)(4 5 6)(7 8 9))) -> ((1 2 3) (4 x 5) (7 8 9))
(nahrad 9 6 'x '((1 2 3)(4 5 6)(7 8 9))) -> ((1 2 3) (4 5 6) (7 8 9))