Predpokladáme, že postupnosť nie je usporiadaná. Preto ju treba celú prejsť a na záver vrátiť nájdené maximum (menšie ako zadané číslo). Použitie pomocného argumentu zjednodušuje hľadanie maxima.
(defun ltmaxpom (zoz cislo maximum)
(cond ((null zoz) maximum)
((AND (< (first zoz) cislo) (> (first zoz) maximum)) (ltmaxpom (rest zoz) cislo (first zoz)))
(T (ltmaxpom (rest zoz) cislo maximum))
)
)
; Vráti prvé číslo zo zoznamu menšie ako zadané.
(defun mensie_ako (zoz cislo)
(cond ((null zoz) NIL)
((< (first zoz) cislo) (first zoz))
(T (mensie_ako (rest zoz) cislo))
)
)
; Inicializujeme.
(defun ltmax (zoz cislo)
(cond ((null (mensie_ako zoz cislo)) NIL)
(T (ltmaxpom zoz cislo (mensie_ako zoz cislo)))
)
)
Príklady:
(ltmax '(1 2 0 4 5 6) 4) -> 2
(ltmax '(9 8 2) 4) -> 2
(ltmax '(9 8 10) 4) -> NIL