1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| ; L1 est la liste des intervalles
; L2 est la liste des valeurs à traiter
(define (nb-intervalles L1 L2)
;; traitement intervalle,
;; on passe en revue tous les éléments de L2 pour savoir s'ils sont dans l'intervalle défini par L1
;; renvoie une liste d'association (Nombre-presents Intervalle)
(define (balaie-un-intervalle Intervalle)
;; on definit une nouvelle fontion qui teste un nombre de L2 pour savoir s'il est dans l'intervalle
;; renvoie le nombre d'occurences lorsque la liste est terminée
(define (teste-valeur L N)
(cond ((null? L) N)
((and (>= (car L) (car Intervalle)) (<= (car L) (cadr Intervalle))) (teste-valeur (cdr L) (+ N 1)))
(else (teste-valeur (cdr L) N))))
(list (teste-valeur L2 0) Intervalle))
;; maintenant, on n'a plus qu'a appliquer la fonction balaie-un-intervalle à toute la liste des intervalles
;; à l'aide de map
(map balaie-un-intervalle L1)) |