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

 


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