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 :

[OCaml]Problème dans un module, erreur que je ne comprends pas


Sujet :

Caml

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 71
    Points : 30
    Points
    30
    Par défaut [OCaml]Problème dans un module, erreur que je ne comprends pas
    Bonjour,

    Cet après-midi, j'ai commencé à coder un carnet d'adresse.
    J'ai créé un type identité qui peut contenir un nom, un prénom, un age, un numéro de téléphone, une adresse; tous sont de type string .
    J'ai implémenté le constructeur, des accesseurs, et une fonction pour afficher l'identité.

    Bon, tout ça est dans un module à part: identite, et je l'ai testé et je crois qu'il marche.

    Ensuite, là ou ça me pose problème:
    J'ai créé un module carnetAdresse qui contiendra toutes les fonctions du carnet d'adresse. Il n'y a qu'une seule fonction pour l'instant. Voici le code du module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    open Identite
     
    let (ajouterAdresse : identite -> string -> unit) = fun mon_adresse nom_carnet ->
        output nom_carnet ((nom mon_adresse) ^ "\n")     0 (String.length ((nom mon_adresse) ^ "\n"))
    	output nom_carnet ((prenom mon_adresse) ^ "\n")  0 (String.length ((prenom mon_adresse) ^ "\n"))
    	output nom_carnet ((age mon_adresse) ^ "\n")     0 (String.length ((age mon_adresse) ^ "\n"))
    	output nom_carnet ((nbTel mon_adresse) ^ "\n")   0 (String.length ((nbTel mon_adresse) ^ "\n"))
    	output nom_carnet ((adresse mon_adresse) ^ "\n") 0 (String.length ((nbTel mon_adresse) ^ "\n"))
    Et le code de son interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    type identite
    val ajouterAdresse : identite -> string -> unit
    J'ai compilé ces trois modules, bien qu'ils ne fassent rien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ocamlc -o carnet.exe identite.mli identite.ml carnetAdresse.mli carnetAdresse.ml
    File "carnetAdresse.ml", line 4 characters 4-10:
    Error: This function is applied to too many arguments,
    maybe you forgot a ';'
    Je ne comprends pas du tout cette erreur, pouvez vous m'aider s'il vous plaît ?

    Merci d'avance !
    Cordialement,
    Lucky-84

    EDIT: cette erreur est corrigée, j'avais oubliés les points virgules
    Nouvelle erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    File "carnetAdresse.ml", line 4, characters 11-21:
    Error: this expression has type string but is here used with type out_chaner
    Je ne sais pas exactement ce que je dois faire: un open_in ou un open_out, sachant que je veux juste rajouter quelque chose dans le fichier...

    EDIT2: erreur corrigée, voici le nouveau code (j'ai bien sure modifié l'interface ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    open Identite
     
    let (ajouterAdresse : identite -> out_channel -> unit) = fun mon_adresse nom_carnet ->	
        output nom_carnet ((nom mon_adresse) ^ "\n")     0 (String.length ((nom mon_adresse) ^ "\n"));
    	output nom_carnet ((prenom mon_adresse) ^ "\n")  0 (String.length ((prenom mon_adresse) ^ "\n"));
    	output nom_carnet ((age mon_adresse) ^ "\n")     0 (String.length ((age mon_adresse) ^ "\n"));
    	output nom_carnet ((nbTel mon_adresse) ^ "\n")   0 (String.length ((nbTel mon_adresse) ^ "\n"));
    	output nom_carnet ((adresse mon_adresse) ^ "\n") 0 (String.length ((nbTel mon_adresse) ^ "\n"));
    Et voici la nouvelle erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    File "carnetAdresse.ml", line 1, characters 0-1:
    Error: The implementation carnetAdresse.ml
           does not match the interface carnetAdresse.cmi
           The field 'identite' is required but not provided
    Là par contre je ne comprends pas du tout... je demande alors votre aide !

    Pensez à , lisez les !
    Fujitsu Siemens AMILO DEKSTOP Li 3745, Intel Core 2 Quad, 4 GO RAM, 640GO DD, nVidia GeForce GT120(1gb), Windows Vista Home Prenium, Ubuntu 9.04

  2. #2
    alex_pi
    Invité(e)
    Par défaut
    Comme tu as vu en ouvrant un interpréteur caml, et en tapant "output" dedans, c'est que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # output;;
    - : out_channel -> string -> int -> int -> unit = <fun>
    C'est quand même assez bas niveau comme fonction !
    Pour juste afficher, tu as "print_string" qui attend une simple chaîne, ou bien si tu veux écrire dans un fichier, tu as "output_string", qui prends un "out_channel" aussi, que tu obtiens à partir d'un fichier grace à "open_out"

    http://caml.inria.fr/pub/docs/manual...ervasives.html

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    Je te remercie !
    Je suis ravi d'avoir découvert output_string !
    Elle est vraiment beaucoup plus simple que output !
    Malheureusement, l'erreur ne change pas

    Pensez à , lisez les !
    Fujitsu Siemens AMILO DEKSTOP Li 3745, Intel Core 2 Quad, 4 GO RAM, 640GO DD, nVidia GeForce GT120(1gb), Windows Vista Home Prenium, Ubuntu 9.04

  4. #4
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par lucky84 Voir le message
    Je te remercie !
    Je suis ravi d'avoir découvert output_string !
    Elle est vraiment beaucoup plus simple que output !
    Malheureusement, l'erreur ne change pas
    Elle attend en premier argument un output_channel que tu obtiens à partir du nom d'un fichier par open_out

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    Ce que je veux, c'est que nom_carnet soit de type out_channel : c'est à dire que l'on fasse un open_out avant d'appeler la fonction, en fait .

    Pensez à , lisez les !
    Fujitsu Siemens AMILO DEKSTOP Li 3745, Intel Core 2 Quad, 4 GO RAM, 640GO DD, nVidia GeForce GT120(1gb), Windows Vista Home Prenium, Ubuntu 9.04

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    Quand on doit appeler ma fonction ajouterAdresse, on doit envoyer une valeur de type out_channel justement, et une adresse, pour que la fonction puisse travailler

    Pensez à , lisez les !
    Fujitsu Siemens AMILO DEKSTOP Li 3745, Intel Core 2 Quad, 4 GO RAM, 640GO DD, nVidia GeForce GT120(1gb), Windows Vista Home Prenium, Ubuntu 9.04

  7. #7
    alex_pi
    Invité(e)
    Par défaut
    c'est bien d'éditer tes messages, mais bizarrement, je ne m'amuse pas à relire l'intégralité d'un thread à chaque fois. Donc si tu as une nouvelle erreur, tu postes une nouvelles réponses avec les détails, et on peut y réfléchir. Mais si tu postes une erreur toutes les 10 minutes, c'est que tu n'as pas passé assez de temps à réfléchir par toi même.

    Recompile le fichier d'interface à partir d'un .mli à jour. Et utilise un outil comme ocamlbuild qui t'éviteras ce genre d'ennui

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    Mais bizarrement, quand j'ai édité mes messages, personne n'avait encore répondu, donc je pouvais pas deviner que tu l'avais déjà lu

    Et je sais pas si tu le fais exprès, mais mettre deux fois le même message, à 20 minutes d'intervalle, c'est pas très malin

    Et au fait, ça marche comment ocamlbuild ?

    Pensez à , lisez les !
    Fujitsu Siemens AMILO DEKSTOP Li 3745, Intel Core 2 Quad, 4 GO RAM, 640GO DD, nVidia GeForce GT120(1gb), Windows Vista Home Prenium, Ubuntu 9.04

  9. #9
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par lucky84 Voir le message
    Mais bizarrement, quand j'ai édité mes messages, personne n'avait encore répondu, donc je pouvais pas deviner que tu l'avais déjà lu
    Désolé d'être si lent...


    Citation Envoyé par lucky84 Voir le message
    Et je sais pas si tu le fais exprès, mais mettre deux fois le même message, à 20 minutes d'intervalle, c'est pas très malin
    Problème de connectivité, message supprimé.


    Citation Envoyé par lucky84 Voir le message
    Et au fait, ça marche comment ocamlbuild ?
    Bien. Google peut sans doute t'aider à en savoir plus.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    Figure toi que je suis pas idiot: j'ai fait une recherche.
    Mais je ne trouve que des trucs en anglais, et je ne suis pas vraiment super fort en anglais...

    Pensez à , lisez les !
    Fujitsu Siemens AMILO DEKSTOP Li 3745, Intel Core 2 Quad, 4 GO RAM, 640GO DD, nVidia GeForce GT120(1gb), Windows Vista Home Prenium, Ubuntu 9.04

  11. #11
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Ah ben j'crois qu'il n'y a pas de forum pour ce langage, ici...


    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  12. #12
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par lucky84 Voir le message
    Figure toi que je suis pas idiot: j'ai fait une recherche.
    Mais je ne trouve que des trucs en anglais, et je ne suis pas vraiment super fort en anglais...
    C'est clair qu'avec tant de gentillesse et de douceur à l'égard de ceux qui essayent de t'aider, tu as de bonne chance d'être entendu.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    Garulfo> J'ai juste répondu sur le ton avec lequel on m'a parlé ...

    Ah ben j'crois qu'il n'y a pas de forum pour ce langage, ici...
    Ah c'est drôle ...

    Pensez à , lisez les !
    Fujitsu Siemens AMILO DEKSTOP Li 3745, Intel Core 2 Quad, 4 GO RAM, 640GO DD, nVidia GeForce GT120(1gb), Windows Vista Home Prenium, Ubuntu 9.04

  14. #14
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    D'accord merci !

    Et désolé de m'être emporté

    Par contre, pour compiler plusieurs modules, on fait comment ?

    Merci d'avance !

    Pensez à , lisez les !
    Fujitsu Siemens AMILO DEKSTOP Li 3745, Intel Core 2 Quad, 4 GO RAM, 640GO DD, nVidia GeForce GT120(1gb), Windows Vista Home Prenium, Ubuntu 9.04

  16. #16
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Chacun leur tour ... ?

  17. #17
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Citation Envoyé par lucky84 Voir le message
    Par contre, pour compiler plusieurs modules, on fait comment ?
    Tu poses ta question 4 minutes après que l'on t'a donné des infos et des liens. Tu ne vas pas nous faire croire que tu as cherché correctement.

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    Il me semble que dans le lien indiqué, ça montre comment compiler un seul fichier

    Pensez à , lisez les !
    Fujitsu Siemens AMILO DEKSTOP Li 3745, Intel Core 2 Quad, 4 GO RAM, 640GO DD, nVidia GeForce GT120(1gb), Windows Vista Home Prenium, Ubuntu 9.04

  19. #19
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par lucky84 Voir le message
    Il me semble que dans le lien indiqué, ça montre comment compiler un seul fichier
    Dans tous les cas, OCamlBuild examine tous les fichiers OCaml du répertoire, détermine les fichiers qui sont nécessaires pour compiler mon_fichier.ml, lesquels de ces fichiers ont été modifiés et doivent donc être recompilés, puis se charge des étapes de compilation et de liaison. En cas de problème de compilation, OCamlBuild affiche des messages d'erreur comparables à celles de la ligne de commande OCaml.
    Il se débrouille pour compiler tous les modules qu'il faut pour l'exécutable final.

    Tu ne vas encore pas apprécier mon ton, mais sérieusement, commence par réfléchir avant de poser une question, c'est comme ça que tu progresseras.

  20. #20
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Tu fais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [InOCamlWeTrust @ localhost] rtfm --multicomp --ocaml --verbose
    Puis, tu attends que la ligne de commande te demande le noms des modules à compiler. Tu termines par le nom du compilateur que tu veux utiliser : il y a ocamlc ou ocamlopt. Si tu as, par exemple, les modules m1, m2 et m3, tu fais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [InOCamlWeTrust @ localhost] rtfm --multicomp --ocaml --verbose
    Which modules do you want to compile ?
    m1
    m2
    m3
    ocamlc
    Et là tu devrais avoir le résultat de la compilation.

    Je confirme, par ailleurs, que cette séquence fonctionne aussi bien sous Unix, Linux ou Windows.
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

Discussions similaires

  1. [OCaml]Problème dans un module: je vois pas..
    Par lucky84 dans le forum Caml
    Réponses: 2
    Dernier message: 21/01/2009, 14h03
  2. [debug] erreur que je ne comprend pas
    Par PoZZyX dans le forum Java ME
    Réponses: 4
    Dernier message: 11/07/2006, 08h05
  3. std ::vector [erreur que je ne comprend pas]
    Par aaronw dans le forum SL & STL
    Réponses: 8
    Dernier message: 05/03/2006, 21h00
  4. [Débutant] Message d'erreur que je ne comprends pas
    Par Le Furet dans le forum Langage
    Réponses: 2
    Dernier message: 25/02/2006, 17h37
  5. [PostGreSQL] une erreur que je ne comprends pas
    Par flo78 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/02/2006, 10h18

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