Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Caml
Caml Forum d'entraide sur la programmation avec les langages fonctionnels Caml-Light et OCaml
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/04/2008, 19h52   #1
gilou71
Invité de passage
 
Inscription : 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?


gilou71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 21h35   #2
gorgonite
Rédacteur/Modérateur

 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur d'études
Inscription : décembre 2005
Messages : 9 961
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 28
Localisation : France

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

Informations forums :
Inscription : décembre 2005
Messages : 9 961
Points : 18 152
Points : 18 152
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
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 23h45   #3
Garulfo
Inactif
 
Inscription : juillet 2005
Messages : 1 958
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : juillet 2005
Messages : 1 958
Points : 2 209
Points : 2 209
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
Garulfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 02h28   #4
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 962
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 962
Points : 1 148
Points : 1 148
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)
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 08h04   #5
james-mi
Membre du Club
 
Inscription : mai 2005
Messages : 130
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 130
Points : 47
Points : 47
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 ....
james-mi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 10h32   #6
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 962
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 962
Points : 1 148
Points : 1 148
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.
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 11h09   #7
gilou71
Invité de passage
 
Inscription : février 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 4
Points : 0
Points : 0
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...
gilou71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 11h12   #8
gilou71
Invité de passage
 
Inscription : février 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 4
Points : 0
Points : 0
pardon c'est quoi le mode tuareg et le caml-toplevel?Merci d'avance...
gilou71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 13h49   #9
SpiceGuid
Rédacteur
 
Avatar de SpiceGuid
 
Homme Damien Guichard
Inscription : juin 2007
Messages : 1 512
Détails du profil
Informations personnelles :
Nom : Homme Damien Guichard
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 1 512
Points : 2 495
Points : 2 495
@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 projet, le blog dvp et le jeu vidéo.
Avant de poser une question je lis les règles du forum.
SpiceGuid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 14h26   #10
gilou71
Invité de passage
 
Inscription : 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...
gilou71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2008, 08h00   #11
james-mi
Membre du Club
 
Inscription : mai 2005
Messages : 130
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 130
Points : 47
Points : 47
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.
james-mi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2008, 21h43   #12
Fractal LLG
Futur Membre du Club
 
Inscription : février 2008
Messages : 75
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 75
Points : 16
Points : 16
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
Fractal LLG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2008, 23h25   #13
james-mi
Membre du Club
 
Inscription : mai 2005
Messages : 130
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 130
Points : 47
Points : 47
merci pour l'astuce...s'il n'y a rien de mieux c'est ce que je vais faire ...
james-mi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2008, 01h32   #14
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 962
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 962
Points : 1 148
Points : 1 148
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.
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2009, 13h01   #15
jawal78
Invité de passage
 
Inscription : décembre 2008
Messages : 1
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 1
Points : 1
Points : 1
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.
jawal78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2009, 12h49   #16
vtrone
Membre Expert
 
Avatar de vtrone
 
Homme
Inscription : novembre 2005
Messages : 1 900
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2005
Messages : 1 900
Points : 2 028
Points : 2 028
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
#
vtrone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2012, 13h20   #17
tchioprof
Invité de passage
 
Homme Ghislain Foulquier
Inscription : 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).
tchioprof est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h25.


 
 
 
 
Partenaires

Hébergement Web