IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scheme Discussion :

Aide pour un exercice de Racket/Scheme


Sujet :

Scheme

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 3
    Points : 4
    Points
    4
    Par défaut 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 : 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.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Bonjour

    Je peux me tromper car je ne suis pas spécialiste de Scheme mais j'ai l'impression que tu te trompes :
    ta proposition b serait plutôt du "récursif enveloppé" (quelle définition t'as t' on donné de "récursif enveloppé" ?).
    Pour le b, je pense que tu devrais t'orienter vers un do ou un loop.
    Pour le c, as-tu étudié les fonctions foldl et foldr ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

Discussions similaires

  1. [Débutant] Besoin d'aide pour un exercice
    Par bebetoalvaro dans le forum Pascal
    Réponses: 9
    Dernier message: 05/02/2007, 01h59
  2. Besoin d'aide pour un exercice sur les registres
    Par zakuza dans le forum Assembleur
    Réponses: 5
    Dernier message: 14/04/2006, 14h23
  3. Aide pour un exercice
    Par nelob dans le forum Assembleur
    Réponses: 5
    Dernier message: 02/03/2006, 23h46
  4. Demande d'aide pour un exercice
    Par IDE dans le forum C
    Réponses: 3
    Dernier message: 29/10/2005, 15h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo