Sú dve možnosti. Buď funkcia zruší len prvý výskyt daného prvku, alebo zruší všetky také prvky. V oboch prípadoch ide o filter. V druhom prípade je to však čistý filter.


; Funkcia zruší všetky také prvky. Ak by mala zrušiť len prvý, treba
; upraviť akciu v druhej podmienke v cons. Nebolo by tam rekurzívne
; volanie, ale len (rest tab). Toto by bolo výhodne, ak by sa tabuľka
; reprezentovala zoznamom bodka-dvojíc s jednoznačným kľúčom v každom
; prvku (t.j. ľavá časť bodka-dvojice je jedinečná vrámci zoznamu).

(defun zrus (sv tab)
 (cond ((null tab) NIL)
       ((equal (first (first tab)) sv) (zrus sv (rest tab)))
       (T (cons (first tab) (zrus sv (rest tab))))
 )
)

; Príklad:
(zrus 'k2 '((k1 . a)(k2 . b)(k3 . c)(k2 . x))) -> ((k1 . a) (k3 . c))

 


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