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

Caml Discussion :

Exercice de caml


Sujet :

Caml

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Par défaut Exercice de caml
    Bonjour j'ai un petit souci avec un exercice tout d'abord, on m'a demandé de faire une fonction explose qui fait cela [5;4;3;3] donne [[5];[4];[3];[3]]

    j'ai donc ecrit cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let rec explose = function
      []->[]
      |(a::l)->[a]::explose l;;
    ensuite on me demande de faire une fonction etend qui fait cela par exemple etend 5 [[1;2];[3]] donne cela [[5;1;2];[5;3]] et la je n'y arrive vraiment pas merci de m'aider

  2. #2
    Membre émérite
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Par défaut
    Bonsoir,

    Ta première fonction est correcte. Tu peux juste enlever les parenthèses superflues dans (a :: l) et noter au passage que c'est un cas particulier de l'itérateur map :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    let explose liste = List.map (fun x -> [x]) liste
    Pour la deuxième fonction que l'on te demande d'écrire, est-ce encore un itérateur de type map ? Si oui, que faut-il changer au code ci-dessus pour obtenir le bon résultat ? Tu vas voir que ce n'est pas bien difficile.

    Cordialement,
    Cacophrène

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Par défaut
    merci de votre réponse, en prenant votre réponse j'ai essayé avec cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let etend n liste = List.map (fun x -> n::[x]) liste;;
    cependant cela marche pour etend 5 [3;4;7];; cela va me donner [[5;3];[5;4];[5;7]];;
    mais cela ne fonctionne pas avec etend 5 [[1;2];[3]] je ne vois pas trop pourquoi
    merci de me repondre

    j'ai fait comme cela aussi mais ça ne me donne pas exactement ce que je veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     let rec explose c = function
    []->[]
    |(a::l)->[c,a]::explose c l;;

  4. #4
    Membre émérite
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Par défaut
    Bonjour,

    C'est un bon début ! Il faut bien comprendre ce que fait map et pour ça, rien de tel que raisonner en termes de types. Pour la fonction explose, l'itérateur applique une fonction anonyme (fun x -> [x]). Cette fonction reçoit une valeur de type quelconque x et l'insère dans une liste (une liste à un seul élément, autrement dit un singleton).

    Pour la fonction etend, on dispose de plus d'informations sur le type de x puisque c'est une liste de valeurs de type quelconque (soit le type 'a list). Cela veut dire qu'il ne faut pas écrire (fun x -> n :: [x]), car x est déjà une liste, mais tout simplement (fun x -> n :: x). Je t'invite à comparer les deux signatures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    val etend_incorrect : 'a -> 'a list -> 'a list list
    val etend_correct : 'a -> 'a list list -> 'a list list
    Cordialement,
    Cacophrène

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Par défaut
    D'accord j'ai compris dans ce cas là, merci et si jamais on voulait à la place d'un entier mettre une autre liste par exemple toto [3;5][[1;];3];; pour qu'il donne [[3;1];[3;3];[5;1];[5;3]] dans ce cas il faudrait mettre [n]: ou pas ?
    merci de votre réponse

  6. #6
    Membre émérite
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Par défaut
    Bonjour,

    Citation Envoyé par reuqnas
    si jamais on voulait à la place d'un entier mettre une autre liste par exemple toto [3;5][[1;];3];; pour qu'il donne [[3;1];[3;3];[5;1];[5;3]]
    Je ne comprends pas bien l'énoncé : il y a une erreur dans [3;5][[1;];3], est-ce qu'il faut lire [3;5] [[1]; [3]] ou [3;5] [[1;3]] ou autre chose ?

    Cordialement,
    Cacophrène

Discussions similaires

  1. exercice en caml
    Par matt-yeux dans le forum Caml
    Réponses: 5
    Dernier message: 12/11/2011, 01h34
  2. Exercice caml complexité
    Par reuqnas dans le forum Caml
    Réponses: 3
    Dernier message: 07/04/2011, 20h56
  3. exercice en caml
    Par much1707 dans le forum Caml
    Réponses: 7
    Dernier message: 26/05/2009, 20h54
  4. Pouvez vous m'aider a resoudres ces 3 exercices
    Par algorithmique dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 09/08/2002, 17h26

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