Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Discussion: read_int avec ocaml

  1. #1
    Invité de passage
    Inscrit en
    février 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : février 2007
    Messages : 4
    Points : 0
    Points
    0

    Par défaut read_int avec ocaml

    Bonjour,

    j'utilise ocaml sous windows et quand j'écris puis entrée puis le nb puis entrée il ne se passe rien, est ce que quelqu'un a déjà eu ce problème et aurais une réponse?



  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro Nicolas Vallée
    Ingénieur d'études
    Inscrit en
    décembre 2005
    Messages
    10 206
    Détails du profil
    Informations personnelles :
    Nom : Homme Nicolas Vallée
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : décembre 2005
    Messages : 10 206
    Points : 16 754
    Points
    16 754

    Par défaut

    bizarre, ça ne le fait pas sous la version unix

    Code :
    1
    2
    3
    4
    # let a = read_int ();; 
    2
    val a : int = 2
    #
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Inactif
    Inscrit en
    juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : juillet 2005
    Messages : 1 958
    Points : 2 133
    Points
    2 133

    Par défaut

    et sous Mac aussi
    Code :
    1
    2
    3
    4
    5
            Objective Caml version 3.09.3
    # let a = read_int ();; 
    2
    val a : int = 2
    #
    Le problème vient probablement d'ailleurs — genre 12 pouces devant l'écran

  4. #4
    LLB
    LLB est déconnecté
    Membre Expert
    Inscrit en
    mars 2002
    Messages
    962
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 962
    Points : 1 128
    Points
    1 128

    Par défaut

    Tu testes dans quel logiciel ? Il attend peut-être ";;" avant d'envoyer la valeur au mode interactif ? (il me semble que le mode tuareg le fait)

  5. #5
    Membre du Club
    Inscrit en
    mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : mai 2005
    Messages : 130
    Points : 47
    Points
    47

    Par défaut

    Citation Envoyé par LLB Voir le message
    Tu testes dans quel logiciel ? Il attend peut-être ";;" avant d'envoyer la valeur au mode interactif ? (il me semble que le mode tuareg le fait)
    Je viens d'essayer avec emacs + tuareg (linux) que je ne maîtrise pas encore totalement, dans le toplevel :
    le toplevel attend une valeur, je tape 2 puis "entrée", emacs rajoute ";;" et la fonction read_int plante avec
    Code :
    Failure : "int_of_string"
    euh... on fait comment dans ce cas ....

  6. #6
    LLB
    LLB est déconnecté
    Membre Expert
    Inscrit en
    mars 2002
    Messages
    962
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 962
    Points : 1 128
    Points
    1 128

    Par défaut

    Je viens d'essayer avec le mode tuareg, ça marche si on entre la valeur dans le "caml-toplevel". Les points-virgules ne sont ajoutés qu'avec les fonctions de type tuareg-eval- (C-c C-e et les autres).

    En général, je préfère passer les valeurs en argument aux fonctions, plutôt que de faire un read_. Je trouve ça plus pratique avec le mode interactif.

  7. #7
    Invité de passage
    Inscrit en
    février 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : février 2007
    Messages : 4
    Points : 0
    Points
    0

    Par défaut

    Je crois que c'est un problème qui concerne la boucle interactive sous windows,c'est quand même vachement handicapant de ne pas pouvoir faire une entée sortie, ça ne marche pas non plus avec les ;; apres le nb,alors...

  8. #8
    Invité de passage
    Inscrit en
    février 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : février 2007
    Messages : 4
    Points : 0
    Points
    0

    Par défaut

    pardon c'est quoi le mode tuareg et le caml-toplevel?Merci d'avance...

  9. #9
    Rédacteur
    Avatar de SpiceGuid
    Homme Profil pro Damien Guichard
    Inscrit en
    juin 2007
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Nom : Homme Damien Guichard
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : juin 2007
    Messages : 1 574
    Points : 2 449
    Points
    2 449

    Par défaut

    @gilou

    La lecture en entrée ne fonctionne pas dans l'interface OCamlWin(Plus).
    Tu dois ouvrir un CMD.EXE puis lancer ocaml et là ça fonctionne:

    Code :
    1
    2
    3
    4
    5
    6
    7
    >ocaml
            Objective Caml version 3.09.3
    
    # let a = read_int();;
    2
    val a : int = 2
    #
    @james-mi

    Ben pareil, avec rxvt au lieu de cmd.exe.

    Citation Envoyé par LLB
    En général, je préfère passer les valeurs en argument aux fonctions, plutôt que de faire un read_. Je trouve ça plus pratique avec le mode interactif.
    C'est la voie de la sagesse.
    Du même auteur: le cours OCaml, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  10. #10
    Invité de passage
    Inscrit en
    février 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : février 2007
    Messages : 4
    Points : 0
    Points
    0

    Par défaut Merci ça marche

    Merci beaucoup Spiceguid, ça fonctionne...

  11. #11
    Membre du Club
    Inscrit en
    mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : mai 2005
    Messages : 130
    Points : 47
    Points
    47

    Par défaut

    Citation Envoyé par LLB Voir le message
    Je viens d'essayer avec le mode tuareg, ça marche si on entre la valeur dans le "caml-toplevel". Les points-virgules ne sont ajoutés qu'avec les fonctions de type tuareg-eval- (C-c C-e et les autres).
    chez moi c'est activé d'office. Y a-t-il un moyen de le désactiver? pour éviter les ";;" après l'entier, qui me conduisent à un "Exception: Failure "int_of_string" ?

    Citation Envoyé par LLB Voir le message
    En général, je préfère passer les valeurs en argument aux fonctions, plutôt que de faire un read_. Je trouve ça plus pratique avec le mode interactif.
    moi aussi, mais ça peut être utile à l'occasion, et je n'arrive pas à le faire fonctionner ...
    @spiceguid : je ne connais pas rxvt, j'utilise parfois ocaml dans le terminal gnome - read_int() n'y pose pas de pb.

  12. #12
    Futur Membre du Club
    Inscrit en
    février 2008
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 75
    Points : 16
    Points
    16

    Par défaut

    Bonjour

    J'ai déjà eu le même problème (rajout des ;; sous Emacs ce qui fait planter read_int) et pour le contourner j'ai trouvé la parade suivante (c'est un peu beaucoup du bricolage), j'ai rajouté au début de mon programme le code
    Code :
    1
    2
    let read_int () = (* Nouvelle fonction read_int pour régler les problèmes de compatibilité avec Emacs *)
      let str = read_line() in int_of_string (if str.[(String.length str) - 1] = ';' then String.sub str 0 (String.length str - 2) else str)
    qui se charge de redéfinir la fonction read_int en enlevant les éventuels points-virgules à la fin du nombre entré par l'utilisateur.
    C'est pas super joli, mais ça marche

    Fractal

  13. #13
    Membre du Club
    Inscrit en
    mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : mai 2005
    Messages : 130
    Points : 47
    Points
    47

    Par défaut

    merci pour l'astuce...s'il n'y a rien de mieux c'est ce que je vais faire ...

  14. #14
    LLB
    LLB est déconnecté
    Membre Expert
    Inscrit en
    mars 2002
    Messages
    962
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 962
    Points : 1 128
    Points
    1 128

    Par défaut

    Citation Envoyé par james-mi Voir le message
    chez moi c'est activé d'office. Y a-t-il un moyen de le désactiver? pour éviter les ";;" après l'entier, qui me conduisent à un "Exception: Failure "int_of_string" ?
    Je viens de regarder le code Lisp. Il suffit d'appeler la fonction comint-send input pour envoyer l'entrée au mode interactif, sans attendre ";;". Par chance, il y a déjà un raccourci pour cette fonction : il s'agit de M-entrée.

  15. #15
    Invité de passage
    Inscrit en
    décembre 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : décembre 2008
    Messages : 1
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par LLB Voir le message
    Je viens de regarder le code Lisp. Il suffit d'appeler la fonction comint-send input pour envoyer l'entrée au mode interactif, sans attendre ";;". Par chance, il y a déjà un raccourci pour cette fonction : il s'agit de M-entrée.

  16. #16
    Membre Expert
    Homme Profil pro Stéphane
    Inscrit en
    novembre 2005
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Nom : Homme Stéphane
    Localisation : France

    Informations forums :
    Inscription : novembre 2005
    Messages : 1 901
    Points : 2 062
    Points
    2 062

    Par défaut

    Sous Windows, en utilisant OcamlWinPlus, j'ai le même problème que toi.

    Par contre, pas en utilisant le toplevel ocaml. Ouvre une invite de commandes, tape Puis ressaisi ta ligne
    Ton nombre
    Et ça fonctionnera.
    Code :
    1
    2
    3
    4
    5
    6
            Objective Caml version 3.11.0
    
    # let a = read_int();;
    2
    val a : int = 2
    #

  17. #17
    Invité de passage
    Homme Profil pro Ghislain Foulquier
    Inscrit en
    octobre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Nom : Homme Ghislain Foulquier
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : octobre 2012
    Messages : 1
    Points : 1
    Points
    1

    Par défaut une solution

    J'ai affecté la commande comint-send-input à une touche (f10 par exemple)
    Dans le fichier d'initialisation de Emacs ( le mien est .emacs.d/init.el) j'ai écrit :
    (global-set_key [f10] 'comint-send-input) puis sauvé le fichier (C-x C-s)
    J'utilise la touche f10 au lieu de <RET>.
    Voir le lien http://www.gnu.org/software/emacs/ma...Init-Rebinding
    Remarque : dans Emacs read_int() marche dans inferior-caml mais pas dans caml-toplevel.
    Elle marche aussi dans un terminal mais pas dans la boucle d'interaction de ocaml (sous Windows).

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •