Prechádzame zoznam a hľadáme kľúč. Ak predpokladáme, že kľúč v zozname určite bude je výhodné urobiť prechádzanie zoznamu jednou rekurzívnou funkciou (rekurzia s rozšírením). Ak však kľúč v zozname nemusí byť, je výhodné použiť pomocný argument a rekurziu na chvoste. Týmto prístupom možno vrátiť napr. NIL ak kľúč nenájdeme.


; Prvý prvok má idex 1.
; Ak predpokladám, že kľúč v zozname určite bude je výhodne použiť pozk_a.

(defun pozk_a (k zoz)
 (cond ((equal k (first (first zoz))) 1)
       (T (+ 1 (pozk_a k (rest zoz))))
 )
)

; Príklad:
(pozk_a 'x '((k1 . 1)(x . 2))) -> 2

; Ak je však aj možnosť, že kľúč v zozname nebude, môžeme to urobiť
; podobne ako v príklade poz0.

; Keď chceme vracať NIL, je vhodné použiť pomocný argument.
; Ten budem inicializovat na 1.
(defun pozk_bpom (k c zoz)
 (cond ((null zoz) NIL)
       ((equal k (first (first zoz))) c)
       (T (pozk_bpom k (+ c 1) (rest zoz)))
 )
)

(defun pozk_b (k zoz)
 (pozk_bpom k 1 zoz)
)

; Príklady:
(pozk_b 'x '((k1 . 1)(x . 2)))  -> 2
(pozk_b 'x '((k1 . 1)(k2 . 2))) -> NIL

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