Výhodné je implementovať funkciu kdeje vracajúcu pozíciu prvku v zozname. Ak prvok nenájde, vráti napríklad NIL. Ak nájde vráti v zozname pozíciu. Potom budeme v hlavnej funkcií prechádzať riadky poľa a hľadať v nich pomocou funkcie kdeje daný prvok.
; Ak nájde prvok vráti jeho pozíciu(od 0) + úvodná inicializácia poz.
; Pozíciu vráti v zozname! Pre porovnávanie prvku môžeme použiť napr. equal.
; Ak teda inicializujem na 1, vracia pozíciu od 1... ak na 0 od 0.
; Ak nenájde prvok vracia NIL.
(defun kdeje (prv zoz poz)
(cond ((null zoz) NIL)
((equal prv (first zoz)) (cons poz NIL))
(T (kdeje prv (rest zoz) (+ poz 1)))
)
)
Príklady:
(kdeje 'a '(1 2 3 a b) 0) -> (3)
(kdeje 'a '(1 2 3 a b) 1) -> (4)
(kdeje 'a '(1 2) 0) -> NIL
; Hlavná funkcia.
; Ak funkcia prvok nenájde vráti 0, inak (riadok stĺpec), inicializuje sa na 0, používa
; kdeje tiež inicializované na 0. Teda číslujem prvky od 0.
(defun pozicia (prv pole poz)
(cond ((null pole) NIL)
((kdeje prv (first pole) 0) (list poz (first (kdeje prv (first pole) 0))))
(T (pozicia prv (rest pole) (+ poz 1)))
)
)
Príklad:
(pozicia 'a '((1 2 3)(1 2 a)(3 4 5)) 0) -> (1 2)