Aide pour un exercice de Racket/Scheme
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:
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:
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:
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.