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