1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| (define (fonction L)
(if (null? L) ; si L est une liste vide...
'(0 0) ; ... on renvoie (0 0)
; à partir de cette ligne, on sait que L a au moins 1 élément
(if (null? (cdr L)) ; si L ne contient qu'un élément...
(list (car L) 1) ; ... on renvoie cet élément, avec 1 comme nombre d'occurence(s)
; à partir de cette ligne, on sait que L a au moins 2 éléments
(let ((res (fonction (cdr L)))) ; res est donc le couple (maximum de cdrL, nb d'occurrences dans cdrL)
(if (> (car L) (car res)) ; si (car L) est supérieur à (car res), ...
(list (car L) 1) ; ... c'est en fait lui, (car L), le maximum de L, et de nb d'occurrence(s) 1
(if (= (car L) (car res)) ; ... sinon, si (car L) est égal à égal à (car res)...
(list (car L) (+ 1 (cadr res))) ; ... (car res) est le bon maximum, il faut juste augmenter son nombre d'occurrences de 1 ...
res)))))) ; ... sinon on renvoie res, puisque carL est < que le maximum de cdr L
(fonction '()) ; -> (0 0)
(fonction '(7)) ; -> (7 1)
(fonction (list 1 3 3 2)) ; -> (3 2)
(fonction (list 1 2 4 3)) ; -> (4 1) |
Partager