Salut,
J'aimerais de l'aide pour cet exo si possible :

On s'intéresse à la fonction (unzip AL) prenant une A-liste AL ((a b) ...) et retournant la liste à deux éléments (L1 L2) où L1 [resp. L2] est la liste des premiers [resp. seconds] éléments des couples de AL :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
> (unzip '((a 1) (b 2) (c 3)))
((a b c) (1 2 3))
a) Programmez (unzip AL) de manière fonctionnelle récursive enveloppée.

b) Programmez (unzip-it AL) de manière fonctionnelle itérative.

c) Programmez (unzip-os AL) en une ligne, à l'ordre supérieur.


-----------

En fait, il me semble avoir trouvé pour le b et le c. Mais je ne suis pas du tout sûr. J'aurais surtout besoin d'aide pour le a) . En fonctionnel récursif enveloppé.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
b) (define (unzip-it AL) ; Fonctionnel itératif
       (define (iter L type)
         (if (null? L)
         L
         (if (equal? type 'first)
            (cons (caar L) (iter (cdr L) type))
            (cons (cadar L) (iter (cdr L) type)))))
       (list (iter AL 'first) (iter AL 'second)))
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
c) (define (unzip-os AL)  ; Ordre supérieur
        (build-list 2 (lambda (i)
                  (build-list (length AL) (lambda (j)
                                            (list-ref (list-ref  AL j) i))))))
Merci.