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

  1. #1
    Membre à l'essai
    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
    Points : 18
    Points
    18
    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 éprouvé
    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
    Points : 1 125
    Points
    1 125
    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 à l'essai
    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
    Points : 18
    Points
    18
    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 éprouvé
    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
    Points : 1 125
    Points
    1 125
    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 à l'essai
    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
    Points : 18
    Points
    18
    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 éprouvé
    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
    Points : 1 125
    Points
    1 125
    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

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    reuqnas, une remarque toute bête sur la forme, qui te sera utile: en français, "merci de votre réponse" est un remerciement et c'est bien, par contre "merci de m'aider" et "merci de me répondre" ne sont pas des remerciements, c'est une formule que l'on utilise pour *demander* aux gens de nous aider, et est en fait utilisé et perçu comme une exigence. En gros quand tu dis "merci de m'aider" on lit "je vous ordonne de m'aider".

    J'imagine que ce n'est pas ce que tu veux dire et que c'est seulement une erreur de français de ta part. Fait attention tout de même à éviter cette tournure (merci de + infinitif), ça peut être mal perçu par les gens en face.

  8. #8
    Membre à l'essai
    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
    Points : 18
    Points
    18
    Par défaut
    Je ne comprend pas tout a fait votre intervention je ne viens pas sur le site pour apprendre le français si vous lisez bien j'ai marqué merci de votre réponse et non merci de me répondre car je remerciais la personne qui m'a répondu et ensuite lorsque je dit merci de m'aider, c'est juste une marque de politesse en vers les personnes qui vont me poster un commentaire c'est pas "aider moi" mais "merci de m'aider".
    Bonne soirée

  9. #9
    Membre éprouvé
    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
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    Et pour l'énoncé ? Je ne peux pas t'aider si tu ne me donnes pas l'énoncé correct. Regarde mon dernier message, il y a un souci avec la forme des données en entrée.

    Cordialement,
    Cacophrène

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Citation Envoyé par reuqnas Voir le message
    Je ne comprend pas tout a fait votre intervention je ne viens pas sur le site pour apprendre le français si vous lisez bien j'ai marqué merci de votre réponse et non merci de me répondre car je remerciais la personne qui m'a répondu et ensuite lorsque je dit merci de m'aider, c'est juste une marque de politesse en vers les personnes qui vont me poster un commentaire c'est pas "aider moi" mais "merci de m'aider".
    Ceci n'est pas vrai : dans ton premier message tu as dit "merci de m'aider", et dans ton second "merci de me répondre". "Merci de votre réponse" est correct, puisque cela désigne une réponse qui a déjà été donnée, donc c'est un remerciement sur un acte passé. "Merci de me répondre" désigne un acte futur et a donc un sens de demande : "je vous prie de me répondre". De même "merci de m'aider" veut dire "je vous demande de m'aider".

    Ce n'est pas une marque de politesse, c'est une marque d'impolitesse de ta part. Je sais que tu ne viens pas pour apprendre le français, mais il n'empêche que tu devrais éviter d'être impoli sur un forum où tu demandes de l'aide.

    Je ne te demande pas de t'excuser, je comprends bien que tu ne connais pas bien cette tournure française et que tu l'emploies donc par maladresse plutôt que volontairement. Par contre, quand je fais une remarque à ce sujet pour te rendre service, la moindre des choses serait de faire l'effort de comprendre ce que je dis.

    Merci de faire un effort la prochaine fois.

  11. #11
    Membre à l'essai
    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
    Points : 18
    Points
    18
    Par défaut
    Pour qui vous vous prenez avec votre moral, on se demande pourquoi êtes vous là, vous avez du vous tromper de forum, enfin bon j'ai pas le temps de rester jouer à çà, la meilleur des réponses sera surement le silence. Par rapport à l'exercice, oui il y a bien une erreur de ma part, c'est comme vous l'avait marqué en deuxième proposition.
    Merci

  12. #12
    Membre éprouvé
    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
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    Bon, on a donc comme données de départ quelque chose comme ceci [[1;3]; [2; 5]] et on veut y ajouter une liste telle que [1; 2] pour obtenir [[1; 2; 1; 3]; [1; 2; 2; 5]]. Je ne vais pas te donner la réponse tout de suite. On a écrit plus haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    let etend n t = List.map (fun t -> n :: t) t
    Compte tenu du nouveau type de n (il s'agit maintenant d'une liste), quelle est la zone du code à modifier ? Une piste : quelle est la signature de l'opérateur cons :: ? Y a-t-il quelque chose de comparable pour le nouveau type de données à manipuler ?

    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