Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Autres langages > [OCamL] Retrouvailles difficiles ! > Lecture du sujet

[OCamL] Retrouvailles difficiles !

Inclusions dans l'interpréteur en ligne de commande...

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne NoHaR # Posté le 05/07/2008 à 12:23:33
Wakarimashita yo
Avatar
Groupe : Membres
Bonjour.

J'ai voulu aujourd'hui me remettre au CamL, par curiosité, après toutes ces années depuis la prépa où il m'avait bien fait souffrir :p ...
J'ai donc installé OCamL.

J'avais souvenance que l'on pouvait écrire des fonctions dans un fichier .ml et ensuite les inclure dans l'interpréteur en ligne de commande pour jouer avec...
Après diverses recherches sur le net (où j'ai découvert quelques tutoriels, topics, etc.) j'ai cru comprendre qu'il fallait simplement utiliser la commande "include".

J'ai donc créé un fichier "hello.ml" :

Code : OCaml - hello.ml
1
let moyenne a b = (a +. b) /. 2.;;


Puis dans une console :

Code : Console
arnaud@arnaud-desktop:~/Developpement/OCaml$ ocaml
        Objective Caml version 3.10.0

# include "hello.ml";;
Syntax error


>_< ...
j'ai essayé en donnant le chemin absolu, au cas où... pareil, inclure le répertoire du fichier avec -I quand j'appelle l'interpréteur ocaml... pareil !

J'ai eu beau chercher sur le net des précisions sur la commande include, nulle part je n'ai trouvé réponse à ma question.

Si quelqu'un pouvait m'expliquer brièvement comment faire (utiliser un fichier .ml dans l'interpréteur...) ça m'aiderait beaucoup.

Merci d'avance.

Image utilisateur
La facilité : c'est ne pas essayer de ne pas vivre en contradiction avec les idées que l'on ne défend pas...

Mon Tutoriel
: Vision par Ordinateur
Avancement : Nouveaux chapitres à l'horizon :p
 
Hors ligne bluestorm # Posté le 05/07/2008 à 13:48:27
dont ask to ask
Avatar
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
C'est #use (c'était "include" sans # en caml light, il me semble). Pour charger un fichier déjà compilé (en .cmo), c'est #load. Par contre ça charge un module : si tu fais #use "foo.ml", il va tout interpréter en direct, si tu fais #load "foo.cmo", les valeurs seront accessibles dans le modeule Foo.

Il existe quelques autres directives, assez peu utiles dans le cas général, mais tu peux aussi utiliser ocamlfind pour apporter des fonctionnalités super pratiques de chargement des bibliothèques.

Par ailleurs, indispensable pour utiliser le toplevel (enfin indispensable une fois que tu l'as utilisé une fois) : utilise un wrapper : ce sont des programmes qui apportent les fonctionnalités d'édition de base (effacer son texte, revenir en arrière dans l'historique, etc.), à essayer absolument. Il en existe au moins deux, prend celui qui a des paquets pour ta distribution : ledit et rlwrap.
 
Hors ligne NoHaR # Posté le 05/07/2008 à 14:01:14
Wakarimashita yo
Avatar
Groupe : Membres
Merci beaucoup.
J'ai essayé rlwrap... le seul souci étant... qu'on ne peut pas revenir à une ligne précédente.
Je vais jeter un oeil à ledit.
Sinon tant pis ça sera tuareg + emacs :p .

Image utilisateur
La facilité : c'est ne pas essayer de ne pas vivre en contradiction avec les idées que l'on ne défend pas...

Mon Tutoriel
: Vision par Ordinateur
Avancement : Nouveaux chapitres à l'horizon :p
 
Hors ligne bluestorm # Posté le 05/07/2008 à 14:28:49
dont ask to ask
Avatar
Groupe : Membres
Citation
J'ai essayé rlwrap... le seul souci étant... qu'on ne peut pas revenir à une ligne précédente.


Si. Tu as du te chier dessus dans la configuration. Il faut bien sûr lancer ocaml avec "rlwrap ocaml" (ou déclarer un alias).
 
Hors ligne NoHaR # Posté le 05/07/2008 à 15:40:43
Wakarimashita yo
Avatar
Groupe : Membres
OK, ça fonctionne, j'ai réglé de manière à utiliser nano pour l'édition multi-ligne, parce qu'avec emacs+tuareg pour l'interactif je trouve ça un poil... lourd et pas joli (épargnez-moi, ce n'est que mon avis :p ), quant à vim... heu... ben c'est vim, quoi ! :lol: (épagnez-moi aussi).


J'aurais maintenant deux petites questions un peu plus orientées linux, juste pour le confort d'utilisation :

Existe-t-il un fichier de coloration syntaxique pour le caml dans nano (genre caml.nanorc) trouvable quelque-part (et qui m'aurait échappé) ou faut-il que je me le tape à la main (pour éditer mes petits fichiers .ml) ? J'ai commencé à en créer un mais c'est... long, surtout que je ne me souviens plus de tous les mots-clés...

D'autre-part, il n'y a pas un moyen d'activer la coloration syntaxique dans la console en mode interactif, soit en option du programme, soit avec une bidouille quelconque ? ...

J'ai commencé par faire un auto-RTFM, évidemment, mais je n'ai pas trouvé l'info.


Image utilisateur
La facilité : c'est ne pas essayer de ne pas vivre en contradiction avec les idées que l'on ne défend pas...

Mon Tutoriel
: Vision par Ordinateur
Avancement : Nouveaux chapitres à l'horizon :p
 
Hors ligne bluestorm # Posté le 05/07/2008 à 15:51:16
dont ask to ask
Avatar
Groupe : Membres
Jamais essayé. J'ai plutôt tendance à utiliser le toplevel pour les essais rapides (tests de fonctions, etc.), et Emacs pour l'édition sérieuse.

Je pense que si c'est important, tu peux essayer d'écrire un fichier de coloration pour nano toi-même, ça a l'air plutôt facile (si tu fais ça, je suis prêt à donner un coup de main ou un avis).
 
Hors ligne NoHaR # Posté le 05/07/2008 à 16:02:18
Wakarimashita yo
Avatar
Groupe : Membres
Bien, dans ce cas, je pense que je vais mettre à jour mon caml.nanorc au fur et à mesure que je découvrirai des choses à colorier :p
Pour l'instant il est ultra-sommaire et incomplet, "let|in|if|then|else|rec|match" coloré, plus les commentaires entre (* et *)...
Je pense que je vais devoir toucher un peu aux opérateurs, et colorer aussi spécialement le ";;" , les strings, peut-être aussi quelques fonctions classiques (celles de transtypage notemment)...


... ça va être long :p

Dès que j'ai quelquechose de correct, je posterai un petit aperçu.


Toute aide est bien sûr la bienvenue, par exemple sous forme de listes de mots-clés à colorier de la même couleur...

Image utilisateur
La facilité : c'est ne pas essayer de ne pas vivre en contradiction avec les idées que l'on ne défend pas...

Mon Tutoriel
: Vision par Ordinateur
Avancement : Nouveaux chapitres à l'horizon :p
 
Hors ligne bluestorm # Posté le 05/07/2008 à 18:04:21
dont ask to ask
Avatar
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
syntax "ocaml" "\.mli?$"
#nombres
color red "\<[A-Z][0-9a-z_]{2,}\>"
#declarations
color green "\<(let|val|method|in|and|rec|private|virtual|constraint)\>"
#phrases
color red "\<(type|open|class|module|exception|external)\>"
#patterns
color blue "\<(fun|function|functor|match|try|with)\>"
#patterns-modifiers
color yellow "\<(as|when|of)\>" 
#conditions
color cyan "\<(if|then|else)\>"
#blocs
color magenta "\<(begin|end|object|struct|sig|for|while|do|done|to|downto)\>"
#constantes
color green "\<(true|false)\>"
#modules/classes
color green "\<(include|inherit|initializer)\>"
#expr modifiers
color yellow "\<(new|ref|mutable|lazy|assert|raise)\>"
#comments
color white start="\(\*" end="\*\)"
#strings (pas de gestion des chaines multilignes pour l'instant)
color brightblack ""[^\"]*""


Il n'y a pas de gestion des symboles. C'est utile ?
(je pense que les symboles sont déjà assez graphiquement reconnaissables tous seuls)
Édité le 05/07/2008 à 18:05:15 par bluestorm
 
Hors ligne NoHaR # Posté le 05/07/2008 à 18:10:34
Wakarimashita yo
Avatar
Groupe : Membres
J'vais pouvoir m'amuser à le fusionner avec ce que j'avais entammé, merci !


EDIT : Voilà j'ai fait en sorte que ça soit relativement logique et relativement à mon goût aussi !
Globalement j'ai codé comme ceci :

En bleu (normal ou bright) : la plupart des mots-clés, conditionnelles, etc.
En vert : les listes, et plus ou moins tout ce qui touche à l'approche par pattern matching.
En rouge les types, et la déclaration de types.
En "jaune" (ou orange) : nombres + opérateurs.
En "pourpre" : les strings.
En cyan, les commentaires.

Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
## (O)CamL syntax coloration

syntax "ocaml" "\.mli?$" "rlwrap"

# On s'arrange pour mettre en évidence tout ce qui est ouvert (parenthèses, crochets, guillemets) et pas fermé

##possible errors : open "[( that are not closed yet
color brightwhite "(\(|\"|\[)(\\.|[^(\)|\"|\])*$" 
color white "\([^*](.*|[^)])*\)" 
color green "\[(.*|[^]])*\]"



##keywords
color brightblue "\<(let|val|method|in|and|rec|private|virtual|constraint)\>"
color blue "\<(if|then|else)\>"
color blue "\<(begin|end|object|struct|sig|for|while|do|done|to|downto)\>"
color blue "\<(as|when|of)\>"
color red "\<(int|float|bool|char|string)\>"
color brightblue "\<(new|ref|mutable|lazy|assert|raise|)\>"
color brightgreen "\|"
color brightblue "\<(include|inherit|initializer)\>"

color blue "\<(fun|function|functor|match|try|with)\>"
color brightblue "\;(\;)?"

color brightred "\<(type|open|class|module|exception|external)\>"

##numbers and strings 
color yellow "[[:space:]][0-9][0-9]*(\.)?"
color green "\[\]"
color brightgreen "\<(true|false)\>"
color magenta "<[^= ]*>" ""(\\.|[^\"])*""
color magenta start=""(\\.|[^\"])*\\ *$" end="^(\\.|[^\"])*""


##relations and operators
color brightyellow "(\=|[ ]*>[ ]*|[ ]*<[ ]*|\:\=)"
color brightgreen "\:\:" 
color brightyellow "(\+|\*|\/|-)(\.)?"

color brightgreen "\->"

##Comments
color brightcyan "\(\*(\\.|\*|\(|[^\*]\)|[^(\*\))])*$"
color cyan "\(\*.*\*\)"
Édité le 07/07/2008 à 10:50:56 par NoHaR

Image utilisateur
La facilité : c'est ne pas essayer de ne pas vivre en contradiction avec les idées que l'on ne défend pas...

Mon Tutoriel
: Vision par Ordinateur
Avancement : Nouveaux chapitres à l'horizon :p
 

Retour au forum "Autres langages" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 75 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.185s (0.1673s)