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 :

les enregirement en ocaml


Sujet :

Caml

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 73
    Points : 57
    Points
    57
    Par défaut les enregirement en ocaml
    Bonsoir,

    Je souhaite coder une fonction qui crée et enregistre aléatoirement une personne (create_body) si l'identifient de la personne n'existe pas présente, si l'identifient existe la personne ne sera pas enregistrée.
    je créer une fonction qui test l'égalité de (Id) test : 'body -> bool. qui à ne marche pas : Error: Unbound value body.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    type body = { id: int ; sexe:string ;   age:int };;
     
            let test =let last_id= Random.int(100) in 
                                if(last_id =body.id) then true 
                                else false ;;
    quelqu'un peut m'aider à corriger et créer la fonction (create_body): val create 'body -> bool :qui crée et enregistre aléatoirement une personne.

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    je ne réponds qu'à la première partie de la question ("quelqu'un peut m'aider à corriger")

    dans ta fonction tu testes l'égalité entre "last_id" et "body.id"; or last_id est bien une variable mais body est un type...
    Il me semble que ce serait plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let test person =let last_id= Random.int(100) in 
                                if(last_id =person.id) then true 
                                else false ;;

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 73
    Points : 57
    Points
    57
    Par défaut Reproduction humaine
    une fonction qui simule la reproduction animal: reproduire i papa maman qui renvoie la liste de progéniture( list enfant)

    Mon probleme est comment passer à la liste à partir :
    | (individu1 , individu2)->let (a,b) in
    if(i=individu1.id && i=individu2.id) then raise EmptyList
    else [] :: (reproduire i a b) ;;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    let rec  reproduire i individu1 individu2= match (individu1, individu2) with
            |(_,_ ) -> raise EmptyList 
            |( _, individu2) -> raise EmptyList 
            |(individu1,_ ) -> raise EmptyList 
            | (individu1 , individu2)->let (a,b) in 
              if(i=individu1.id && i=individu2.id) then  raise EmptyList  
            else []::(reproduire i a b) ;;
    Aide merci stendhal666

  4. #4
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    Mmm... je ne comprends pas du tout ton code.

    reproduire i papa maman
    a priori papa maman peuvent se passer de i pour se reproduire?

    |(_,_ ) -> raise EmptyList
    '_' qu'on appelle "wildcard" matche n'importe quoi, donc le résultat sera toujours raise EmptyList...

    []:reproduire i a b)
    Donc le type de retour est une liste de listes (vides)?

    Réfléchis bien à ce que tu veux faire avant de te lancer dans le code!

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 73
    Points : 57
    Points
    57
    Par défaut
    Merci ! je reprend en detail
    Un individu est un type defini par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    type personn= {id : int ; sexe : string ;  age: int };;
     
     
    let produit i p1 p2 = if(i=p1.id && i=p2.id) then [] else [];;  
    val produit : int -> personn -> personn -> 'a list = <fun>
    Question : le type de la fonction doit être val produit : int -> personn -> personn -> personn list = <fun> au lieu de val produit : int -> personn -> personn -> 'a list = <fun>

    la fonction prend id et deux personnes, on test, si les deux personnes on le même id il retourne une liste des personne vide sinon on renvoie la liste de personnes produites.(on ne test pas le sexe)

  6. #6
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Si tu t'interroges sur la manière de créer un enregistrement, c'est en déclarant la valeur de chaque champ avec le symbole d'égalité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # {id=1;sexe="male";age=0};;
    - : person = {id = 1; sexe = "male"; age = 0}
    C'est toujours une bonne idée de nous donner le type attendu. En général on peut assez bien deviner l'intention cachée derrière un type commeval produit : 'a list -> 'b list -> ('a * 'b) list = <fun>. Parce que le type est assez générique et/ou parce que ça correspond à une opération mathématique bien connue.

    Par contre dans le cas de val produit : int -> person -> person -> person list = <fun> on est complètement démuni. On ne peut que corriger un code que tu nous proposerais. Or tu ne nous proposes rien du tout. Connaître la définition du type person ne nous avance à rien tant que l'on ne connaît pas davantage ta méthode de reproduction.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 73
    Points : 57
    Points
    57
    Par défaut
    Merci SpiceGuid :
    transformer le type ; val produit : int -> personn -> personn -> 'a list = <fun> à val produit : int -> personn -> personn -> personn list = <fun>
    autrement dit:
    La question est comment et par quelle solution 'a list soit personn liste le code est ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    type personn= {id : int ; sexe : string ;  age: int };;
     
    let produit i p1 p2 = if(i=p1.id && i=p2.id) then [] else [](*la liste renvoyer doit être une liste de personne issue de deux personnes ayant des id different *);;  
     
    val produit : int -> personn -> personn -> 'a list = <fun>

  8. #8
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # let produit i p1 p2 = if(i=p1.id && i=p2.id) then [] else [p1;p2];;
    val produit : int -> person -> person -> person list = <fun>
    Mais est-ce que ça fait ton bonheur
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 73
    Points : 57
    Points
    57
    Par défaut
    SpiceGuid : c'est exactement ce dont je cherchais !! merci infiniment !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. les enregirement d'une liste en ocaml
    Par gomisse dans le forum Langages fonctionnels
    Réponses: 1
    Dernier message: 24/08/2015, 20h21
  2. Les Typages en Ocaml avancé.
    Par gomisse dans le forum Caml
    Réponses: 2
    Dernier message: 23/02/2015, 16h47
  3. Réponses: 42
    Dernier message: 07/07/2012, 10h16
  4. Les TAD en OCaml
    Par SpiceGuid dans le forum Caml
    Réponses: 19
    Dernier message: 17/04/2009, 00h32
  5. Réponses: 6
    Dernier message: 11/05/2007, 22h51

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