Scheme Filter
debmaths
Messages postés
4
Statut
Membre
-
debmaths -
debmaths -
Bonjour,
Voici un exercice sur lequel je bute. Je n'ai vraiment aucune idée pour le faire. En effet "filtre" a deux arguments: un "test" dont le résultat est obligatoirement un booléen et une seule liste
Dans tout cet exercice, on considérera que les listes sont de longueur égales et contiennent des données de type String.
Écrire une fonction qui vérifie l'égalité de deux listes en utilisant la fonctionnelle filter.
Merci pour votre aide
Voici un exercice sur lequel je bute. Je n'ai vraiment aucune idée pour le faire. En effet "filtre" a deux arguments: un "test" dont le résultat est obligatoirement un booléen et une seule liste
Dans tout cet exercice, on considérera que les listes sont de longueur égales et contiennent des données de type String.
Écrire une fonction qui vérifie l'égalité de deux listes en utilisant la fonctionnelle filter.
Merci pour votre aide
A voir également:
- Scheme Filter
- Photo filter 7 - Télécharger - Retouche d'image
- Microsoft windows search filter host - Forum Windows
- Ac3 filter - Télécharger - Pilotes & Matériel
- Keyboard filter 01 - Forum Clavier
- Echec de filter imprimante ✓ - Forum MacOS
1 réponse
En désespoir de cause j'ai tourné le problème mais je ne réponds pas à la question.
J'ai fusionné les 2 listes en une liste association et j'ai traité cette liste.
define (merge L1 L2)
(cond ((and (null? L1) (null? L2)) L1)
((or (null? L1) (null? L2)) #f)
(else
(let ((x (merge (cdr L1) (cdr L2))))
(if (eq? x #f)
#f
(cons (list (car L1) (car L2)) x))))))
;;; liste (nombre) --> liste (nombre)
;;; (xfiltre1 = L3 L4) : rend une liste des nombres égaux entre L3 et L4
;;; () * () rend ()
;;; exemple (1 2 3) (1 2 4)--> (1 2)
;;; rend #f si nombre d'arguments entre L3 et L4 différents ou 1 liste vide
;;; = peut être remplacé par < ou >
(define (xfiltre1 test? L3 L4)
(let ((tL (merge L3 L4)))
(define (xfiltre2 tL)
(if (pair? tL)
(let ((couple (car tL))
(k (xfiltre2 (cdr tL))))
(if (test? (car couple) (cadr couple))
(cons (car couple) k)
k))
(list)))
(if (eq? tL #f)
#f
(xfiltre2 tL))))
J'ai fusionné les 2 listes en une liste association et j'ai traité cette liste.
define (merge L1 L2)
(cond ((and (null? L1) (null? L2)) L1)
((or (null? L1) (null? L2)) #f)
(else
(let ((x (merge (cdr L1) (cdr L2))))
(if (eq? x #f)
#f
(cons (list (car L1) (car L2)) x))))))
;;; liste (nombre) --> liste (nombre)
;;; (xfiltre1 = L3 L4) : rend une liste des nombres égaux entre L3 et L4
;;; () * () rend ()
;;; exemple (1 2 3) (1 2 4)--> (1 2)
;;; rend #f si nombre d'arguments entre L3 et L4 différents ou 1 liste vide
;;; = peut être remplacé par < ou >
(define (xfiltre1 test? L3 L4)
(let ((tL (merge L3 L4)))
(define (xfiltre2 tL)
(if (pair? tL)
(let ((couple (car tL))
(k (xfiltre2 (cdr tL))))
(if (test? (car couple) (cadr couple))
(cons (car couple) k)
k))
(list)))
(if (eq? tL #f)
#f
(xfiltre2 tL))))