Home

manuel de r´ef´erence du langage caml - The Caml language

image

Contents

1. let main_window initscr in let small_window newwin 10 5 20 10 in mvwaddstr main_window 10 2 Hello 90 Manuel d utilisation du syst me Caml Light mvwaddstr small_window 4 3 world refresh for i 1 to 100000 do done endwin Pour compiler ce programme test m1 lancez camlc c test ml Finalement il reste faire l dition de liens du tout camlc custom o test test zo curses o lcurses III La biblioth que standard du syst me Caml Light 9 La biblioth que de base Ce chapitre d crit les modules de la biblioth que de base de Caml Light Cette biblioth que joue un r le particulier dans le syst me pour deux raisons e Elle est automatiquement li e avec les fichiers de code objet produits par la com mande camlc chapitre 3 Les fonctions d finies dans la biblioth que de base peuvent donc tre utilis es dans les programmes ind pendants sans qu il soit n cessaire d ajouter des fichiers zo la ligne de commande de la phase d dition de liens De m me en usage interactif ces fonctions peuvent tre utilis es di rectement dans les phrases entr es par l utilisateur sans que l on ait charger au pr alable un fichier de code e Les interfaces de certains modules de cette biblioth que sont automatiquement ouvertes au d but de chaque compilation et au lancement du syst me interactif Il est donc possible de se servir d identificateurs non qualifi s pour f
2. 9 1 LP ee IE L SZ LPC Bp eof a lexeme lexbuf supprime les blancs FINDELIGNE INT int_of_string get_lexeme lexbuf PLUS MOINS FOIS DIV PARENG PAREND raise Fin_de_fichier Et voici le programme principal qui combine l analyseur syntaxique et l analyseur lexical Fichier calc ml try let tampon lexing__create_lexer_channel std_in in while true do let r sultat parser__ligne lexer__lexeme tampon in print_int r sultat print_newline flush std_out done with lexer__Fin_de_fichier gt Pour compiler le tout ex cutez camllex lexer mll camlyacc parser mly camlc c parser mli camlc c lexer ml camlc c parser ml camlc c calc ml engendre lexer ml engendre parser ml et parser mli camlc o calc lexer zo parser zo calc zo 8 Communication entre Caml Light et C Ce chapitre d crit comment des primitives crites en C par l utilisateur peuvent tre ajout es l ex cutant de Caml Light et appel es partir du code Caml Light Il s adresse aux utilisateurs tr s avertis et peut tre saut en premi re lecture Mac Cette facilit n est pas impl ment e dans la version Macintosh PC Cette facilit n est pas impl ment e dans les versions PC 8 1 Vue d ensemble 8 1 1 D claration des primitives Les primitives sont d clar es dans un module interface un fichier mli de la m me fa
3. Extensions propres Caml Light 39 uninfix id Supprime le statut d infixe pr c demment attach l identificateur id par une directive infix id directory nom de r pertoire Ajoute le r pertoire donn au chemin d acc s des r pertoires parcourus pour trou ver les fichiers d interface des modules C est quivalent l option I de la ligne de commandes du compilateur ind pendant et du syst me interactif Il Manuel d utilisation du syst me Caml Light 3 Compilation ind pendante camlc Ce chapitre d crit comment les programmes Caml Light peuvent tre compil s non interactivement et transform s en fichiers ex cutables C est le travail de la commande camlc qui effectue la compilation et l dition de liens en anglais linking des fichiers source Caml Light Mac 3 1 Cette commande n est pas une application Macintosh ind pendante Pour ex cuter camlc vous devez poss der l environnement de programmation Mac intosh Programmer s Workshop MPW Les programmes engendr s par camlc sont des outils MPW et non des applications Macintosh ind pendantes Survol du compilateur La commande camlc se contr le via des param tres sur la ligne de commande dans le style de la plupart des compilateurs C Elle accepte plusieurs types d arguments fichiers source pour les impl mentations de modules fichiers source pour les interfaces de modules et impl mentations compil e
4. gc 55 ge_float 97 ge_int 99 ge_string 111 genlex module 117 get_image 132 get_lexeme 120 get_lexeme_char 120 get_lexeme_end 120 get_lexeme_start 120 Index getenv 126 Graphic_failure exception 129 graphics module 129 green 130 gt_float 97 gt_int 99 gt_string 111 hash 119 hash_param 119 hashtbl module 118 hd 106 image type 132 in_channel type 101 in_channel_length 106 include 54 incr 109 index 108 init 123 input 105 input_binary_int 105 input_byte 105 input_char 104 input_line 105 input_value 105 int 123 int module 98 int type 94 int_of_char 94 int_of_float 96 int_of_string 100 interactive 125 intersect 108 invalid_arg 96 Invalid_argument exception 95 io module 101 is_absolute 116 it_list 106 it_list2 107 iter 123 124 key_pressed 133 land infixe 100 le_float 97 le_int 99 151 le_string 111 length 123 124 lexbuf type 119 lexing module 119 lineto 130 list module 106 list type 94 list_it 106 list_it2 107 list_length 106 list_of_vect 114 lnot 100 load 54 load_object 55 log 98 lor infixe 100 lshift_left 100 lshift_right 100 1s1 infixe 100 lsr infixe 100 1t_float 97 1t_int 99 1lt_string 111 lxor infixe 100 magenta 130 make_image 132 make_lexer 117 make_matrix 112 make_string 111 make_vect 112 map 106 map2 107 map_combine 109 map_vect
5. la m moire 5 3 Erreurs courantes Cette section d crit et explique les messages d erreur les plus fr quents nom de fichier no such file or directory nom de fichier aucun fichier ou r pertoire de ce nom Si nom de fichier est le nom d un fichier de code auto ex cutable cela signifie soit que le fichier n existe pas soit qu il ne parvient pas lancer l interpr teur de code camlrun sur lui m me Dans le deuxi me cas Caml Light n a pas t correctement install sur votre machine Cannot exec camlrun Impossible de lancer camlrun Au lancement d un fichier de code auto ex cutable La commande camlrun n a pas t trouv e dans le chemin d acc s des ex cutables V rifiez que Caml Light a t install correctement sur votre machine Cannot find the bytecode file Fichier de code introuvable Le fichier que camlrun tente d ex cuter par exemple le fichier donn en premier argument non optionnel camlrun ou bien n existe pas ou bien n est pas un fichier de code ex cutable valide Truncated bytecode file Fichier de code tronqu Le fichier que camlrun tente d ex cuter n est pas un fichier de code ex cutable valide Il a probablement t tronqu ou modifi depuis sa cr ation Supprimez le et refaites le Uncaught exception Exception non rattrap e Le programme ex cut d clenche une exception inattendue il d clenche une ex ception un moment donn et cette
6. value en true si les deux expressions expr et expr s valuent en true sinon elle s value en false L valuation est s quentielle on value expr en premier et expr n est pas valu e si expr est false Autrement dit expr amp expr se comporte exactement comme if expr then exprs else false L expression expr or expr s value en true si l une des expressions expr et expr s value en true sinon elle s value en false L valuation est s quentielle on value expr en premier et expr n est pas valu e si expr est true Autrement dit expr OF expr se comporte exactement comme if expr then true else exprs Ex L valuation de x 0 or y x gt 2 ne produit jamais de division par z ro quelle que soit la valeur de x 1 7 11 Boucles L expression while expr do expr done value expr de mani re r p t e tant que Vexpression expr s value en true La condition de boucle expr est valu e et test e au d but de chaque it ration L expression while done tout enti re a pour r sultat la valeur ref x in In 2 1 1 1 done 1 Ex let 1 ref 0 and n while In gt 1 don renvoie le logarithme entier en base 2 de x 24 Manuel de r f rence du langage Caml L expression for ident expr to expr do expr done value d abord les expressions expr et expr les bornes en des valeurs enti res n et p Puis le corps de la boucle expr est valu e de fa on
7. CS 92 132 Carnegie Mellon University 1992 Disponible par FTP anonyme sur reports adm cs cmu edu Comment int grer Standard ML les op rations principales des bases de donn es Emden R Gansner et John H Reppy eXene Bell Labs 1991 Disponible par FTP anonyme sur research att com Une interface entre Standard ML of New Jersey et le syst me de fen trage X Windows infixe 109 infixe 95 infixe 97 99 infixe 97 infixe 97 99 infixe 97 infixe 97 99 infixe 97 infixe 97 99 infixe 97 lt infixe 97 99 lt infixe 97 lt infixe 97 99 infixe 97 lt gt infixe 95 lt gt infixe 97 infixe 95 infixe 97 infixe 95 gt infixe 97 99 gt infixe 97 gt infixe 97 99 gt infixe 97 infixe 106 infixe 111 A l abs 100 abs_float 98 acos 98 add 118 122 add_float 97 add_int 99 arg module 115 asin 98 asr infixe 100 Index assoc 108 assq 108 atan 98 atan2 98 background 130 Bad exception 116 basename 117 black 130 blit_image 132 blit_string 111 blit_vect 113 blue 130 bool module 94 bool type 94 Break exception 126 builtin module 94 button_down 133 catch_break 126 cd 55 char module 94 char type 94 char_for_read 95 char_of_int 94 chdir 126 check_suffix 117 chop_suffix 117 clear 118 123 124 clear_gr
8. La signification de 0x80000000 d pend de l impl mentation ce nombre est plus grand que 230 1 1 1 3 D cimaux litt raux d cimal litt ral 0 9 0 9 e E 0 9 7 Les d cimaux en notation flottante se composent d une partie enti re une partie d cimale et un exposant La partie enti re est une suite d un ou plusieurs chiffres optionnellement pr c d e d un signe moins La partie d cimale consiste en un point d cimal suivi de z ro un ou plusieurs chiffres La partie exposant est form e d un caract re e ou E optionnellement suivi d un signe ou suivi d un ou plusieurs chiffres La partie d cimale ou l exposant peuvent tre omis mais pas les deux afin 6 Manuel de r f rence du langage Caml d viter l ambigu t avec les entiers litt raux L interpr tation des d cimaux litt raux d pend enti rement de l impl mentation en particulier pour ce qui est de l intervalle des valeurs repr sentables et de la pr cision de la repr sentation Ex 1 2 0 5 1e 5 1 23E 10 sont des d cimaux litt raux bien form s 1 est un d cimal litt ral mais 1 est un entier litt ral 5 n est pas un d cimal litt ral 1 1 4 Caract res litt raux caract re normal NA Ent lx 0 9 0 9 0 9 caract re litt ral Les caract res litt raux sont encadr s par deux caract res accent grave aussi appel backquote Les deux
9. a lieu dans un plan infini dont l cran montre une partie les trac s en dehors de l cran sont donc permis Voici les sp cifications des modes graphiques autoris s par open_graph sur les diff rentes impl mentations de cette biblioth que Unix L argument d open_graph est une cha ne contenant le nom de l cran en anglais display du serveur X Windows auquel se connecter puis un espace 128 Mac 86 386 La biblioth que standard du syst me Caml Light Ecran point en x y x size_x Figure 11 1 Le rep re de l cran graphique puis une sp cification de g om trie X Windows standard Le nom d cran et ou la g om trie peuvent tre omis Exemples open_graph foo 0 se connecte l cran foo 0 et cr e une fen tre avec la g om trie par d faut open_graph foo 0 300x100 50 0 se connecte l cran foo 0 et cr e une fen tre de 300 pixels de large sur 100 pixels de haut en 50 0 open_graph 300x100 50 0 se connecte l cran par d faut et cr e une fen tre de 300 pixels de large sur 100 pixels de haut en 50 0 open_graph se connecte l cran par d faut et cr e une fen tre avec la g om trie par d faut L argument d open_graph est ignor La version PC 86 est compatible avec les cartes graphiques CGA EGA et VGA L argument d open_graph est interpr t comme suit Argument Mode graphique cga 320 x 200 4 couleurs
10. il charge les r f rences x choueront encore avec l erreur Variable x is unbound la variable x n est pas li e Vous devrez explicitement taper open foo pour que l identificateur x soit automatiquement compl t en foo__x 4 Finalement supposons que le fichier foo m1 pr c dent ait t pr alablement com pil avec la commande camlc c ou la fonction pr d finie compile Le r pertoire courant contient donc une interface compil e foo zi indiquant que foo__x est une variable globale de type int ainsi qu un fichier de code foo zo qui d finit foo__x avec pour valeur 1 Quand le syst me interactif d marre toute r f rence foo__x produira l erreur Identifier foo__x is referenced before being defined l identificateur foo__x est r f renc avant d avoir t d fini Con trairement au cas 3 le v rificateur de types a r ussi trouver l interface compil e du module foo Mais l ex cution ne peut pas avoir lieu puisque aucune d finition pour foo__x n a t mise en m moire Pour ce faire ex cutez load_object foo Cette commande charge en m moire le fichier foo zo et donc d finit foo__x Les r f rences foo__x sont alors correctement valu es Comme dans le cas 3 les r f rences x chouent encore car load_object n ouvre pas le module qu il charge Encore une fois vous devrez explicitement taper open foo pour que l identificateur x
11. y alors hash x hash y De plus hash termine toujours m me sur des structures cycliques value hash_param int gt int gt a gt int hash_param n m x calcule une valeur de hachage pour x avec les m mes pro pri t s que pour hash Les deux param tres suppl mentaires n et m donnent un contr le plus pr cis sur le hachage Le hachage effectue une travers e en pro fondeur d abord de droite gauche de la structure x Le parcours s arr te quand n n uds significatifs ou bien m n uds significatifs ou non ont t visit s Les n uds significatifs sont les entiers les flottants les cha nes de caract res les caract res les bool ens et les constructeurs constants Accro tre m et n signifie accro tre le nombre de n uds pris en compte pour le calcul final de la valeur de hachage et donc ventuellement diminuer le nombre de collisions Cependant le hachage sera plus lent Les param tres m et n r glent donc le compromis entre la pr cision et la vitesse 10 5 lexing la biblioth que d ex cution des analyseurs lexicaux engendr s par camllex Tampons d analyseurs lexicaux type lexbuf Le type des tampons d analyseurs lexicaux Un tampon d analyseur lexical est Vargument pass aux fonctions d analyse lexicale d finies par les analyseurs en gendr s par camllex Le tampon contient l tat courant de l analyseur plus une fonction pour remplir le tampon 120 La biblioth que standard
12. 66 66 69 69 70 72 73 76 76 79 79 82 83 84 86 88 91 93 94 94 94 95 95 96 96 98 98 98 101 106 108 109 109 110 112 Table des mati res 10 La biblioth que d utilitaires 10 1 10 2 10 3 10 4 10 5 10 6 10 7 10 8 10 9 10 10 10 11 10 12 10 13 arg analyse des arguments de la ligne de commande filename op rations sur les noms de fichiers genlex un analyseur lexical g n rique hashtbl1 tables de hachage lexing la biblioth que d ex cution des analyseurs lexicaux engendr s par camllex parsing la biblioth que d ex cution des analyseurs syntaxiques en gendr s par camlyacc printexc affichage d exceptions impr vues printf impression format e queue files d attente random g n rateur de nombres pseudo al atoires sort tri et fusion de listes stack piles sys interface systeme 11 La biblioth que graphique 11 1 graphics primitives graphiques portables IV Annexes 12 Instructions d installation 12 1 12 2 12 3 La version Unix La version Macintosh Les versions PC 13 Bibliographie 13 1 13 2 13 3 13 4 Index Programmer en ML Descriptions des dialectes de ML Impl mentation des langages de programmation fonctionnels Applications de ML vil 115 115 116 117 118 119 120 121 121 122 123 123 124 124 127 129 135 137 137 137 139 145 145 146 147 147 149 Introduction Cet ouvrage contient le
13. Les cha nes de caract res sont des suites finies de caract res L impl mentation doit autoriser des cha nes jusqu 216 1 caract res de longueur 65535 caract res L impl mentation peut autoriser des cha nes plus longues 1 3 5 N uplets Les n uplets de valeurs sont des suites finies de valeurs Le n uplet des valeurs U1 Un est not vi Un L impl mentation doit autoriser les n uplets ayant jusqu 214 1 l ments 16383 l ments et peut autoriser des n uplets ayant davantage d l ments 1 3 6 Enregistrements Les valeurs enregistrements sont des n uplets de valeurs champs nomm s par des tiquettes L enregistrement not tiquette v1 tiquette Un associe la valeur v l tiquette tiquette pour i 1 n L impl mentation doit autoriser les enregistrements ayant jusqu 214 1 champs 16383 champs et peut autoriser des enregistrements ayant davantage de champs 1 3 7 Tableaux Les tableaux sont des suites finies de taille variable de valeurs du m me type L impl mentation doit autoriser les tableaux ayant jusqu 214 1 l ments 16383 l ments et peut autoriser des tableaux plus grands 12 Manuel de r f rence du langage Caml 1 3 8 Valeurs de types somme Une valeur d un type somme est soit un constructeur constant soit une paire d un constructeur non constant et d une valeur Le premier cas est not constructeur constan
14. On suppose que int et string sont des constructeurs de type sans arguments correspondant aux types des valeurs enti res et des chaines de caract res vect un constructeur de type un argument correspondant au type des tableaux hashtbl__t un constructeur de type a deux arguments correspondant au type des tables de hachage Les expressions de types suivantes sont valides 14 Manuel de r f rence du langage Caml Expression Type d not int les entiers int vect les tableaux d entiers string int les paires de cha nes et d entiers string int hashtbl__t les tables de hachage entre cha nes et entiers int gt int les fonctions des entiers dans les entiers int gt int int les fonctions des entiers dans les paires d entiers int gt int int les paires form es d une fonction des entiers dans les entiers et d un entier int gt int vect les fonctions des entiers dans les tableaux d entiers int gt int vect les tableaux de fonctions des entiers dans les entiers 9a gt a les fonctions d un certain type a dans le m me type a 1 5 Constantes constante entier litt ral d cimal litt ral caract re litt ral chaine litt rale constructeur constant La classe syntaxique des constantes comprend les litt raux des quatre types de base entiers flottants caract res chaines de caract res et les constructeurs constants Ex 15 3 14 fa
15. Renvoie la position d criture courante du canal donn value out_channel_length out_channel gt int Renvoie la taille totale nombre de caract res du canal donn value close_out out_channel gt unit Ferme un canal apr s avoir vid le tampon associ Le programme peut faire n importe quoi si l une quelconque des fonctions ci dessus est appel e sur un canal ferm Fonctions g n rales d entr e value open_in string gt in_channel Ouvre le fichier de nom donn en lecture et renvoie un nouveau canal d entr e lisant sur ce fichier positionn au d but du fichier D clenche sys__Sys_error si le fichier n a pas pu tre ouvert value open_in_bin string gt in_channel Analogue open_in mais le fichier est ouvert en mode binaire et non pas en mode texte ce qui inhibe toute conversion pendant les lectures Sur les syst mes d exploitation qui ne distinguent pas le mode texte du mode binaire cette fonction se comporte comme open_in value open_in_gen sys__open_flag list gt int gt string gt in_channel open_in_gen mode droits nom ouvre en lecture le fichier de nom nom Les argu ments mode et droits sp cifient le mode d ouverture et les permissions du fichier voir sys__open Les fonctions open_in et open_in_bin sont des cas particuliers de cette fonction value open_descriptor_in int gt in_channel open_descriptor_in df renvoie un canal d entr e qui lit sur le descripteur de
16. color value magenta color Quelques couleurs pr d finies value background color La couleur du fond de l cran graphique g n ralement soit noir soit blanc clear_graph peint l cran avec cette couleur value foreground color La couleur de trac initiale g n ralement noir si le fond de l cran est blanc et blanc si le fond est noir Trac s de points et de lignes value plot int gt int gt unit Trace le point donn avec la couleur courante du trac value point_color int gt int gt color Renvoie la couleur du point donn R sultat non sp cifi si le point est en dehors de l cran value moveto int gt int gt unit Positionne le point courant value current _point unit gt int int Renvoie la position du point courant value lineto int gt int gt unit lineto x y trace une ligne entre le point courant et le point x y et d place le point courant au point x y value draw_arc int gt int gt int gt int gt int gt int gt unit draw_arc x y rx ry al a2 trace un arc d ellipse avec pour centre x y rayon horizontal rx rayon vertical ry de l angle a1 l angle a2 en degr s Le point courant n est pas modifi La biblioth que graphique 131 value draw_ellipse int gt int gt int gt int gt unit draw_ellipse x y rx ry trace une ellipse avec pour centre x y rayon horizontal rx et rayon vertical ry Le point courant n est pa
17. de la forme nomDeModule__nomDeType m me si les bonnes directives open directives en l occurrence open nomDeModule apparaissent dans la section pr lude En effet le pr lude est copi seulement dans le fichier ml mais pas dans le fichier mli alors que la partie type d une d claration token est copi e dans le mli start symbole symbole D clare les symboles donn s comme points d entr e de la grammaire Pour 74 Manuel d utilisation du syst me Caml Light chaque point d entr e une fonction d analyse syntaxique du m me nom est d finie dans le module produit Les non terminaux qui ne sont pas d clar s comme points d entr e n ont pas de fonction d analyse syntaxique associ e Il faut imp rativement donner un type aux points d entr e avec la directive type suivante type lt type gt symbole symbole Sp cifie le type de l attribut s mantique des symboles donn s Ce n est obligatoire que pour les points d entr e Il n est pas n cessaire de pr ciser le type des autres non terminaux ces types seront inf r s par le compilateur Caml Light la com pilation du fichier produit sauf si l option s est active La partie type est une expression de type Caml Light arbitraire ceci pr s que tous les constructeurs de type non pr d finis doivent avoir des noms compl tement qualifi s de la forme nomDeModule__nomDeType m me si les bonnes directives open en l occurrence open n
18. duits une variable comme dans oy let rec ident function and and ident function in expr Cette construction d finit les identificateurs identi ident comme des fonc tions mutuellement r cursives locales expr Le comportement des autres formes de d finitions let rec d pend de l impl mentation Ex let rec f function 0 gt 1 x gt x g x and g x f x 1 est garanti let rec x 1 x in d pend de l impl mentation car l expression li e x n est pas une d finition de fonction let rec f map g and g function d pend de l impl mentation car l expression li e f n est pas une d finition de fonction let rec f g d pend de l impl mentation car le motif n est pas r duit une variable let rec f int gt int function x gt d pend de l impl mentation car le motif n est pas r duit une variable 1 7 7 S quence L expression expr expr value expr d abord puis exprs et retourne la valeur de exprs Ex 1 g 2 applique la fonction f l argument 1 puis la fonction g Vargument 2 et renvoie la constante Les r sultats de f et de g sont ignor s 1 7 8 Conditionnelle L expression if expr then expr else expr s value en la valeur de exprs si expr s value en la valeur bool enne true et en la valeur de expr3 si expr s value en la valeur bool enne false La partie else exprs est facultati
19. examin s en dernier qui sont fournis par l environnement initial Enfin les directives open et close permettent d ajouter ou de supprimer des noms de modules de cette liste Les noms de modules ajout s par open sont examin s apr s le module en cours de compilation mais avant les modules de la biblioth que standard Ex Onse place dans la situation suivante Le module en cours de compilation s appelle top et contient une seule d finition celle du nom f Les modules ouverts sont en plus de top les modules list et string Le module list d finit les noms map et length Le module string d finit les noms length et sub_string Le nom abr g f est compl t en top__f Le nom abr g sub_string est compl t en string__sub_string Le nom abr g length est compl t en list__length si list pr c de string dans la liste des modules ouverts et en string__length sinon Le nom abr g g ne peut tre compl t et produit une erreur 10 Manuel de r f rence du langage Caml 1 2 3 Identificateur de valeurs de constructeurs d tiquettes valeur globale nom global prefix nom d op rateur nom d op rateur mod 7 7 s lt gt s t lt lt gt lt lt lt gt lt constructeur constant nom global O constructeur non constant nom global prefix constructeur de type nom global tiquette nom global Selon le contexte les noms globa
20. gt b gt unit add tbl x y lie la valeur y la cl x dans la table tbl Les pr c dentes liaisons de x ne sont pas d truites mais simplement cach es si bien qu apr s l appel remove tbl x la liaison pr c dente de x si elle existe est r tablie C est la s mantique des listes d association value find a b t gt a gt b find tbl x renvoie la donn e associ e x dans tbl ou d clenche Not_found si x n est pas li La biblioth que d utilitaires 119 value find_all a b t gt a gt b list find_all tbl x renvoie la liste de toutes les donn es associ es x dans tbl La liaison courante est retourn e en premier puis les liaisons pr c dentes en ordre inverse d introduction dans la table value remove a b t gt a gt unit remove tbl x retire la liaison courante de x dans tbl r tablissant la liaison pr c dente si elle existe Ne fait rien si x n est pas li dans tbl value do_table a gt b gt c gt a b t gt unit do_table f tbl applique f toutes les liaisons dans la table tbl en ignorant tous les r sultats f re oit la cl pour premier argument et la valeur associ e pour second argument L ordre dans lequel les liaisons sont pass es f n est pas sp cifi La primitive polymorphe de hachage value hash a gt int hash x associe un entier positif toute valeur de tout type Il est garanti que si x
21. gt int gt int gt unit Trace l image donn e en positionnant son coin inf rieur droit au point donn value get_image int gt int gt int gt int gt image Capture le contenu d un rectangle de l cran en une image Les param tres sont les m mes que pour fill_rect value create_image int gt int gt image create_image 1 h renvoie une nouvelle image de 1 points de large et de h points de haut pr te tre utilis e par blit_image Le contenu initial de l image est quelconque value blit_image image gt int gt int gt unit blit_image img x y copie des points de l cran dans l image img en modifiant physiquement img Les points copi s sont ceux l int rieur du rectangle de coin inf rieur droit x y et de largeur et hauteur gaux ceux de l image Souris et v nements clavier type status mouse_x int Coordonn e X de la souris mouse_y int Coordonn e Y de la souris button bool Vrai si un bouton est enfonc keypressed bool Vrai si une touche a t enfonc e key char Le caract re de la touche enfonc e Pour rendre compte des v nements La biblioth que graphique 133 type event Button_down Un bouton de la souris est enfonc Button_up Un bouton de la souris est rel ch Key_pressed Une touche est enfonc e Mouse_motion La souris est d plac e Poll Ne pas attendre retourner a
22. gt vect_length v La biblioth que de base 113 value copy_vect a vect gt a vect copy_vect v renvoie une copie du tableau v c est dire un nouveau tableau contenant les m mes l ments que v value fill _vect a vect gt int gt int gt a gt unit fill_vect v deb long x modifie physiquement le tableau v en rempla ant les l ments num ro deb deb long 1 par x D clenche Invalid_argument fill_vect si deb et long ne d signent pas un sous tableau valide de v value blit_vect a vect gt int gt a vect gt int gt int gt unit blit_vect vi o1 v2 o2 long copie long l ments du tableau v1 partir de V l ment num ro o1 dans le tableau v2 partir de l l ment num ro o2 Cette fonction marche correctement m me si vi et v2 d signent le m me tableau et les sous tableaux source et destination se recouvrent D clenche Invalid_argument blit_vect si o1 et long ne d signent pas un sous tableau valide de v1 ou si o2 et long ne d signent pas un sous tableau valide de v2 114 La biblioth que standard du syst me Caml Light value list_of_vect a vect gt a list list_of_vect v renvoie la liste de tous les l ments de v c est dire v 0 v 1 v vect_length v 1 value vect_of_list a list gt a vect vect_of_list 1 renvoie un nouveau tableau contenant les l ments de la liste 1 value map_vect a gt b gt a
23. l entier i2 Field r 0 1 Atom 0 cdr la liste vide result alloc 2 1 Alloue l autre cellule Field result 0 Val_int i1 car l entier il Field result 1 Pop_roots return result La cellule de liste allou e la premi re doit survivre l allocation de la deuxi me la valeur retourn e par le premier appel alloc doit donc tre mise dans une racine enregistr e La valeur retourn e par le second appel alloc peut r sider dans la variable locale non enregistr e result puisque nous n allouons plus dans le reste de la fonction Dans cet exemple la liste est construite de bas en haut On peut aussi la construire de haut en bas C est moins efficace mais cela nous permet d illustrer l usage de la fonction modify r 0 cdr la premi re cellule value alloc_list_int ii i2 int il i2 4 88 Manuel d utilisation du syst me Caml Light value tail Push_roots r 1 r 0 alloc 2 1 Alloue une cellule de liste Field r 0 0 Val_int il car l entier ii Field r 0 1 Val_int 0 Une valeur quelconque tail alloc 2 1 Alloue l autre cellule Field tail 0 Val_int i2 car l entier i2 Field tail 1 Atom 0 cdr la liste vide modify amp Field r 0 1 tail cdr du r sultat tail Pop_roots return r 0 Il serait incorrect d crire directement Field r 0 1 tail
24. num rique ins re un saut de ligne sans envoyer le contenu de la fen tre d entr e On peut modifier ce comportement avec le menu Preferences Le contenu de la fen tre d entr e peut tre dit tout moment avec l interface Macintosh habituelle Le syst me conserve en m moire les phrases pr c demment entr es On se d place dans cet historique avec les menus Previous entry touche commande P pour obtenir l entr e pr c dente et Next entry touche commande N pour obtenir la suivante Pour quitter l application Caml Light vous pouvez ou bien s lectionner l option Quit du menu File ou utiliser la fonction quit d crite la section 4 2 tout moment l analyse syntaxique la compilation ou l valuation de la phrase courante peuvent tre interrompus en appuyant sur commande point ou en s lectionnant option Interrupt Caml Light dans le menu Caml Light Une interruption vous ram ne au signe d invite Le syst me interactif se lance par la commande caml Le nom complet camllight a d tre tronqu cause de limitations bien connues de MS DOS Les phrases sont lues sur l entr e standard les r sultats sont imprim s sur la sortie standard les erreurs sur la sortie d erreur standard La fonction systeme quit met fin la commande caml Plusieurs diteurs lignes r sidents qui ajoutent l dition de ligne et des facilit s d historique l int
25. pas sp cifi si un argument est n gatif prefix Addition flottante infixe prefix Soustraction flottante pr fixe minus_float Oppos flottant prefix Multiplication flottante prefix Division flottante Le r sultat n est pas sp cifi si le second argument est nul prefix Concat nation des listes prefix Concat nation des cha nes prefix D r f rencement renvoie le contenu courant de la r f rence donn e prefix Affectation d une r f rence prefix Test d galit structurelle lt gt prefix lt gt Test d in galit structurelle prefix Test d galit physique prefix Test d in galit physique lt prefix lt Test inf rieur sur les entiers lt prefix lt Test inf rieur ou gal sur les entiers gt prefix gt Test sup rieur sur les entiers gt prefix gt Test sup rieur ou gal sur les entiers lt prefix lt Test inf rieur sur les flottants lt prefix lt Test inf rieur ou gal sur les flottants gt prefix gt Test sup rieur sur les flottants gt prefix gt Test sup rieur ou gal sur les flottants Le comportement des op rateurs ou n est pas sp cifi si le r sultat tombe en dehors de l intervalle des nombres repr sentables entiers ou flottants selon le cas Figure 1 1 Signification des op rateurs 28 Manu
26. r sultat n est pas sp cifi si la chaine donn e n est pas la repr sentation valide d un flottant fstring op rations sur les cha nes de caract res sans v rifications Ce module fournit les m mes fonctions que le module string section 9 16 mais ne fait pas de tests de bornes sur les arguments des fonctions Les fonctions sont donc plus rapides que celles du module string mais le programme peut faire n importe quoi si l on appelle une de ces fonction avec des param tres incorrects c est dire des param tres qui auraient d clench l exception Invalid_argument lors de l appel de la fonction correspondante du module string fvect op rations sur les tableaux sans v rifications Ce module fournit les m mes fonctions que le module vect section 9 17 mais ne fait pas de tests de bornes sur les arguments des fonctions Les fonctions sont donc plus rapides que celles du module vect mais le programme peut faire n importe quoi si l on appelle une de ces fonction avec des param tres incorrects c est a dire des param tres qui auraient d clench l exception Invalid_argument lors de l appel de la fonction correspondante du module vect 9 10 int op rations sur les entiers Les entiers sont repr sent s sur 31 bits Toutes les op rations sont prises modulo 231 Elles n chouent pas en cas de d bordement exception Division _by_zero D clench e quand on divise par z ro ou quand on calcul
27. riel n cessaire Tout Macintosh disposant d au moins 1M de m moire vive 2M sont recommand s et tournant sous les versions 6 ou 7 du syst me Environ 850K d espace libre sur le disque dur Le compilateur ind pendant n cessite actuellement l environnement de programmation Macintosh Programmer s Workshop MPW ver sion 3 2 MPW est distribu par APDA Apple s Programmers and Developers Associ ation Le fichier READ ME de la distribution contient les coordonn es de PAPDA Installation Cr ez le dossier o vous voulez mettre les fichiers Caml Light Double cliquez sur le fichier cl6macbin sea de la disquette de distribution Une bo te de di alogue s ouvre alors Ouvrez le dossier o vous voulez mettre les fichiers Caml Light et cliquez sur le bouton Extract Les fichiers de la distribution seront extraits de la disquette et copi s dans le dossier Caml Light 138 Annexes Pour tester l installation double cliquez sur l application Caml Light La fen tre Caml Light output devrait alors afficher la banni re gt Caml Light version 0 6 Dans la fen tre Caml Light input tapez 1 2 et appuyez sur la touche Retour la ligne La fen tre Caml Light output devrait alors afficher gt Caml Light version 0 6 1 2 int 3 S lectionnez Quit dans le menu File pour quitter l application et revenir au Finder Si vous disposez de MPW vous pouvez installer les out
28. 114 map_vect_list 114 Match_failure exception 20 21 23 94 max 100 mem 107 mem_assoc 108 memq 107 merge 124 min 99 minus 96 99 minus_float 96 minus_int 99 152 mod infixe 99 mouse_pos 133 moveto 130 mult_float 97 mult_int 99 neq_float 97 neq_int 99 neq_string 111 new 118 122 124 not infixe 94 Not_found exception 96 nth_char 110 open 126 open_descriptor_in 104 open_descriptor_out 103 open_flag type 125 open_graph 129 open_in 104 open_in_bin 104 open_in_gen 104 open_out 102 open_out_bin 102 open_out_gen 103 out_channel type 101 out_channel_length 104 Out_of_memory exception 95 output 103 output_binary_int 103 output_byte 103 output_char 103 output_string 103 output_value 103 pair module 108 parse 116 Parse_error exception 109 Parse_failure exception 109 parsing module 120 peek 123 plot 130 point_color 130 pop 124 pos_in 106 pos_out 104 power 98 Annexes pred 99 prerr_char 102 prerr_endline 102 prerr_float 102 prerr_int 102 prerr_string 102 print 122 print_char 101 print_endline 101 print_float 101 print_int 101 print_newline 101 print_string 101 printexc module 121 printf 122 printf module 121 push 124 queue module 122 quit 54 quo infixe 99 raise 95 random module 123 read_float 102 read_int 102 read_key 133 read_line 102 really_input 105 red 13
29. Ceci ne fonctionne que pour les modules compil s en mode de mise au point soit avec Voption g du compilateur ind pendant soit avec la fonction compile du syst me interactif en mode de mise au point c est dire les modules pour lesquels existe un fichier zix I r pertoire Ajoute le r pertoire donn la liste des r pertoires parcourus pour trouver les fichiers d interface des modules compil s zi et les fichiers de code compil zo Par d faut le r pertoire courant est parcouru le premier puis le r pertoire de la biblioth que standard Les r pertoires ajout s avec I sont parcourus apr s le r pertoire courant mais avant le r pertoire de la biblioth que standard Quand plusieurs r pertoires sont ajout s avec plusieurs options I sur la ligne de com mande ces r pertoires sont parcourus de la droite vers la gauche le r pertoire le plus droite est parcouru le premier le plus gauche est parcouru le dernier Les r pertoires peuvent aussi tre ajout s au chemin d acc s apr s que l on a lanc le syst me interactif avec la directive directory voir le chapitre 2 0 ensemble de modules Sp cifie quel ensemble de modules standard doit tre implicitement ouvert au lancement du syst me interactif Il y a trois ensembles de modules disponibles cautious prudent fournit les op rations habituelles sur les entiers flottants caract res cha nes tableaux ainsi que la gestion
30. ayant l extension GRD ou GRN les pilotes graphiques dans le r pertoire C CAML386 DEV et trouvez celui dont le nom semble correspondre votre contr leur graphique Si vous ne savez pas quel pilote graphique utiliser ne vous inqui tez pas vous serez condamn au graphique VGA standard c est tout Ensuite ditez le fichier C autoexec bat pour e ajouter C CAML386 BIN la variable PATH c est dire transformer la ligne SET PATH C DOS en SET PATH C DOS C CAML386 BIN e ins rer les lignes suivantes SET CAMLLIB C CAML386 LIB SET GO32TMP C TMP Si votre machine poss de une arithm tique flottante cabl e ins rez la ligne suivante SET G032 driver C CAML386 DEV graph grd gw 640 gh 480 o graph grd est remplacer par le nom du pilote graphique pour votre carte Super VGA d termin ci dessus Les nombres 640 et 480 sp cifient la r solution graphique utilis e par d faut Vous pouvez mettre la place 800 et 600 ou 1024 et 768 selon vos go ts et les capacit s de votre carte Si vous n avez pas pu d terminer le bon pilote graphique n ins rez rien du tout laissez simplement la variable G032 ind finie Si votre machine n a pas d arithm tique flottante c bl e ins rez la ligne 142 Annexes SET G032 emu C CAML386 DEV EMU387 driver C CAML386 DEV graph grd gw 640 gh 480 sur une seule ligne nous avons d couper pour des raisons typographiques o graph grd est remp
31. bi bn effectue f ai b1 f an bn ignorant tous les r sultats D clenche Invalid_argument do_list_combine si les deux listes n ont pas la m me longueur 9 14 ref op rations sur les r f rences type a ref ref of mutable a Le type des r f rences vers une valeur de type a value prefix a ref gt a Ir renvoie le contenu actuel de la r f rence r Pourrait tre d fini par fun ref x gt x value prefix a ref gt a gt unit r a crit la valeur de a dans la r f rence r value incr int ref gt unit Incr mente l entier contenu dans une r f rence Pourrait tre d fini par fun r gt r succ r value decr int ref gt unit D cr mente l entier contenu dans une r f rence Pourrait tre d fini par fun r gt r pred r 9 15 stream op rations sur les flux type a stream Le type des flux en anglais streams dont les l ments ont le type a exception Parse_failure D clench e par les analyseurs syntaxiques quand aucun des premiers composants des motifs de l analyseur ne filtre le flux exception Parse_error D clench e par les analyseurs syntaxiques quand un des motifs de l analyseur a t s lectionn au vu de son premier composant mais que le reste du motif ne filtre pas le reste du flux 110 La biblioth que standard du syst me Caml Light value stream_ next a stream gt a stream_next s renvoi
32. code est copi la fin de l ex cutant d di de telle mani re qu il soit automatiquement ex cut quand le fichier produit ex cutant d di plus code est lanc Pour faire l dition de liens en mode ex cutant d di ex cutez la commande camlc avec e l option custom e les noms des fichiers objets Caml Light fichiers zo souhait s 82 Manuel d utilisation du syst me Caml Light e les noms des fichiers objets et biblioth ques C fichiers o et a qui impl mentent les primitives utilis es On peut aussi sp cifier les biblioth ques avec la syntaxe 1 habituelle par exemple 1X11 au lieu de usr lib 1ibX11 a 8 2 Le type value Tous les objets Caml Light sont repr sent s par le type C value d fini dans le fichier mlvalues h avec les macros qui manipulent les valeurs de ce type Un objet de type value est soit e un entier non allou en anglais unboxed e un pointeur vers un bloc dans le tas en anglais heap de tels blocs sont allou s gr ce l une des fonctions alloc_ de la section 8 4 4 e un pointeur vers un objet en dehors du tas par exemple un pointeur vers un bloc allou par malloc ou vers une variable C 8 2 1 Valeurs enti res Les valeurs enti res encodent des entiers sign s 31 bits Elles ne sont pas allou es 8 2 2 Blocs Les blocs dans le tas qui sont devenus inutiles sont r cup r s par le r cup rateur de m moire en anglais garbage collector i
33. dans la section 1 2 1 7 3 Expressions parenth s es Les expressions expr et begin expr end ont la m me valeur que expr Les deux constructions sont s mantiquement quivalentes mais l usage est d utiliser begin end l int rieur des structures de contr le if then begin end else begin end et les parenth ses dans les autres cas de regroupement d expressions Une contrainte de type peut appara tre l int rieur d une expression parenth s e comme par exemple expr type Cette contrainte oblige le type de expr tre compatible avec type 20 Manuel de r f rence du langage Caml 1 7 4 D finition de fonctions Il y a deux formes syntaxiques de d finition de fonctions La premi re est introduite par le mot cl function function motif gt expr motif gt expr Cette expression s value en une valeur fonctionnelle d finie par cas sur son argument Lorsque cette fonction est appliqu e une valeur v elle tente de filtrer cette valeur par chacun des motifs motif motif Si la valeur v est filtr e par le motif motif expression expr associ e ce motif est valu e et sa valeur est le r sultat de l application de la fonction L valuation de expr a lieu dans un environnement enrichi par les liaisons effectu es pendant le filtrage Si plusieurs motifs filtrent l argument celui qui appara t en premier dans la d finition de la fonction
34. de la pile La pile elle m me n est pas modifi e 10 13 sys interface syst me Ce module fournit une interface simplifi e avec le syst me d exploitation exception Sys_error of string D clench e par certaines fonctions des modules sys et io quand l appel syst me sous jacent choue L argument de Sys_error est une cha ne qui d crit l erreur Les textes des messages d erreur d pendent de l impl mentation et l on ne peut s y fier pour rattraper une erreur syst me particuli re La biblioth que d utilitaires 125 value command_line string vect Les arguments pass s au processus sur la ligne de commande Le premier l ment est le nom de commande sous lequel le programme a t appel value interactive bool La variable bool enne interactive est vraie si le code s ex cute sous le syst me interactif et fausse s il s ex cute comme un programme ind pendant type file_perm int value s_irusr file_perm value s_iwusr file_perm value s_ixusr file_perm value s_irgrp file_perm value s_iwgrp file_perm value s_ixgrp file_perm value s_iroth file_perm value s_iwoth file_perm value s_ixoth file_perm value s_isuid file_perm value s_isgid file_perm value s_irall file_perm value s_iwall file_perm value s_ixall file_perm Droits d acc s aux fichiers r d signe le droit en lecture w le droit en criture x le droit d ex cution usr indique les droits de l utili
35. du premier l ment structurellement gal a La liste 1 est renvoy e sans changement si elle ne contient pas a value exceptq a gt a list gt a list M me comportement que except mais compare les l ments avec l galit physique au lieu de l galit structurelle 108 La biblioth que standard du syst me Caml Light value subtract a list gt a list gt a list subtract 11 12 renvoie la liste 11 priv e de tous les l ments structurellement gaux l un des l ments de 12 value union a list gt a list gt a list union 11 12 place devant la liste 12 tous les l ments de la liste 11 qui ne sont pas structurellement gaux l un des l ments de 12 value intersect a list gt a list gt a list intersect 11 12 renvoie la liste des l ments de 11 qui sont structurellement gaux l un des l ments de 12 value index a gt a list gt int index a 1 renvoie la position du premier l ment de la liste 1 qui est structurelle ment gal a a La t te de la liste a la position 0 D clenche Not_found si a n est pas pr sent dans 1 value assoc a gt a b list gt b assoc a 1 renvoie la valeur associ e a la clef a dans la liste de paires 1 C est a dire que assoc a a b est gal ab si a b est la paire la plus a gauche dans 1 ayant a comme premi re composante D clenche Not_found s il n y
36. du syst me Caml Light value create_lexer_channel in_channel gt lexbuf Cr e un tampon sur le canal d entr e donn create_lexer_channel can renvoie un tampon qui lit depuis le canal d entr e can la position courante de lecture value create_lexer_string string gt lexbuf Cr e un tampon qui lit depuis la cha ne donn e La lecture commence partir du premier caract re de la cha ne Une condition fin de fichier est produite quand la fin de la cha ne est atteinte value create _lexer string gt int gt int gt lexbuf Cr e un tampon avec pour m thode de lecture la fonction trois param tres donn e Quand l analyseur a besoin de caract res il appelle la fonction donn e en lui fournissant une cha ne de caract res s et un compte de caract res n La fonction doit placer n ou moins de n caract res dans s en commen ant au caract re num ro 0 et renvoyer le nombre de caract res fournis Retourner la valeur 0 produit une condition fin de fichier Fonctions pour les actions s mantiques des analyseurs lexicaux Les fonctions suivantes peuvent tre appel es partir des actions s mantiques des analyseurs le code Caml Light entre accolades qui calcule la valeur retourn e par les fonctions d analyse Elles donnent acc s la cha ne de caract res filtr e par l expression rationnelle associ e l action s mantique Ces fonctions doivent tre appliqu es l argument lexbuf qu
37. est s lectionn Si aucun motif ne filtre argument l exception Match_failure est d clench e L autre forme syntaxique de d finition de fonctions est introduite par le mot cl fun fun motif motif gt expr Cette expression calcule la m me valeur fonctionnelle que l expression function motif gt gt function motif gt expr Par cons quent cette expression d finit une fonction curryfi e n arguments c est dire une fonction qui renvoie une fonction qui n fois qui renvoie la valeur de expr dans l environnement enrichi par les filtrages des n arguments par les motifs motif1 motif Ex L expression function x y gt x d finit la fonction premi re projection sur les paires La fonction function gt tete reste gt reste renvoie la liste donn e en argument priv e de son premier l ment Si la liste est vide on renvoie la liste vide La fonction function tete reste gt reste renvoie la liste donn e en argument priv e de son premier l ment Si la liste est vide l exception Match_failure se d clenche La fonction function 1 gt un 2 gt deux n gt beaucoup renvoie la cha ne un lorsqu on l applique la valeur 1 deux lorsqu on l applique 2 et beaucoup lorsqu on l applique une valeur enti re qui n est ni 1 ni 2 fun x y gt x y 2 d finit la fonction moyenne arithm tique sous la forme d une fon
38. fichier df Le descripteur de fichier df doit avoir t pr alablement ouvert en lecture d faut le comportement de cette fonction n est pas sp cifi value input_char in_channel gt char Lit un caract re sur un canal d entr e D clenche End_of_file si la fin du fichier est atteinte La biblioth que de base 105 value input_line in_channel gt string Lit des caract res sur le canal d entr e donn jusqu rencontrer un caract re saut de ligne Renvoie la cha ne de tous les caract res lus sans le caract re saut de ligne la fin D clenche End_of_file si la fin du fichier est atteinte avant que la ligne ne soit compl te value input in_channel gt string gt int gt int gt int input can tamp index longueur tente de lire longueur caract res sur le canal can en les stockant dans la cha ne tamp partir du caract re num ro index La fonction renvoie le nombre de caract res lus entre 0 et longueur compris Le r sultat 0 signifie que la fin du fichier a t atteinte Un r sultat entre 0 et longueur non compris signifie qu il n y a plus de caract res disponibles actuelle ment input doit tre appel e nouveau pour lire les caract res suivants si n cessaire L exception Invalid_argument input est d clench e si index et longueur ne d signent pas une sous cha ne valide de tamp value really_input in_channel gt string gt int gt int gt unit reall
39. gal son second argument 124 La biblioth que standard du syst me Caml Light value merge a gt a gt bool gt a list gt a list gt a list Fusionne deux listes selon le pr dicat donn En supposant que les deux listes arguments sont tri es d apr s le pr dicat merge renvoie une liste tri e contenant les l ments des deux listes Le comportement n est pas sp cifi si les arguments ne sont pas tri s 10 12 stack piles Ce module impl mente les piles qui suivent la strat gie dernier entr premier sorti avec modification en place Ces piles sont aussi appel es LIFO pour last in first out type at Le type des piles contenant des l ments de type a exception Empty D clench e quand pop est appliqu e une pile vide value new unit gt at Renvoie une nouvelle pile initialement vide value push a gt a t gt unit push x s ajoute l l ment x au sommet de la pile s value pop a t gt a pop s supprime et renvoie l l ment au sommet de la pile s ou d clenche Empty si la pile est vide value clear a t gt unit Supprime tous les l ments d une pile value length a t gt int Renvoie le nombre d l ments d une pile value iter a gt b gt a t gt unit iter f s applique f tous les l ments de la pile s tour tour en commen ant par l l ment au sommet de la pile pour terminer par l l ment au fond
40. gt string Vide la sortie standard puis lit des caract res sur l entr e standard jusqu ren contrer un caract re saut de ligne Renvoie la cha ne de tous les caract res lus sans le caract re saut de ligne final value read_int unit gt int Vide la sortie standard puis lit une ligne sur l entr e standard et la convertit en un entier D clenche Failure int_of_string si la ligne lue n est pas la repr sentation d un entier value read_float unit gt float Vide la sortie standard puis lit une ligne sur l entr e standard et la convertit en un flottant Le r sultat n est pas sp cifi si la ligne lue n est pas la repr sentation d un flottant Fonctions g n rales de sortie value open_out string gt out_channel Ouvre le fichier de nom donn en criture et renvoie un nouveau canal de sortie sur ce fichier positionn au d but du fichier Le fichier est tronqu la taille z ro s il existe d j Il est cr s il n existait pas D clenche sys__Sys_error si le fichier ne peut tre ouvert value open_out_bin string gt out_channel Analogue open_out mais le fichier est ouvert en mode binaire et non pas en mode texte ce qui inhibe toute conversion pendant les critures Sur les syst mes d exploitation qui ne distinguent pas le mode texte du mode binaire cette fonction se comporte comme open_out La biblioth que de base 103 value open_out_gen sys__open_fla
41. il y en a et avec la biblioth que standard de Caml Light pour produire un programme ex cutable ind pendant L ordre dans lequel les arguments zo et m1 se pr sentent sur la ligne de commande est important les identificateurs globaux sont initialis s dans cet ordre l ex cution et c est une erreur d utiliser un identificateur global avant de l avoir initialis cette erreur est signal e au moment de l dition de liens Donc un fichier x zo donn doit appara tre avant tous les fichiers zo qui font r f rence l un des identificateurs d finis dans le fichier x zo Le r sultat de la phase d dition de liens est un fichier contenant du code compil qui peut tre lanc par l ex cutant en anglais runtime system de Caml Light la commande nomm e camlrun Si caml out est le nom du fichier produit par la phase d dition de liens la commande camlrun caml out arg argo QTQn ex cute le code compil contenu dans caml out en lui passant pour arguments les cha nes de caract res arg argn Voir le chapitre 5 pour plus de d tails Unix Sur la plupart des syst mes Unix le fichier produit par l dition de liens peut PC 3 2 tre ex cut directement par exemple caml out arg arg2 argn Le fichier produit a le bit x et est capable de lancer lui m me l ex cutant Le fichier produit par la phase d dition de liens est directement ex cutable pourvu qu il ait le suffixe E
42. int gt a gt unit vect_assign v n x modifie physiquement le tableau v en rempla ant l l ment num ro n par x D clenche Invalid_argument vect_assign sin est en dehors de l intervalle 0 vect_length v 1 On peut aussi crire v n lt x au lieu de vect_assign v n x value make_vect int gt a gt a vect make_vect n x renvoie un nouveau tableau de longueur n initialis avec des l ments tous physiquement gaux x au sens de l op rateur value make_matrix int gt int gt a gt a vect vect make_matrix dimx dimy e renvoie un tableau deux dimensions un tableau de tableaux avec pour premi re dimension dimx et pour seconde dimension dimy Initialement tous les l ments de ce tableau sont physiquement gaux a x au sens de l op rateur du module eq section 9 4 On acc de l l ment x y de la matrice m grace la notation m x y value concat_vect a vect gt a vect gt a vect concat_vect vi v2 renvoie un nouveau tableau contenant la concat nation des tableaux v1 et v2 value sub_vect a vect gt int gt int gt a vect sub_vect v debut long renvoie un nouveau tableau de longueur long con tenant les l ments num ro debut jusqu debut long 1 du tableau v D clenche Invalid_argument sub_vect si debut et long ne d signent pas un sous tableau valide de v c est a dire si debut lt 0 ou long lt 0 ou debut long
43. interactif est en mode de mise au point option g du syst me interactif ou Le syst me interactif camllight 55 fonction debug_mode ci dessous la compilation s effectue elle aussi en mode de mise au point comme avec l option g du compilateur ind pendant Le r sultat de la compilation est laiss dans des fichiers zo zi zix Le code compil n est pas charg en m moire load_object nom de fichier Charge en m moire le code compil contenu dans le fichier nom de fichier L extension zo est automatiquement ajout e nom de fichier si elle en tait absente Le fichier de code a t produit soit par le compilateur ind pendant camlc soit par la commande compile du syst me interactif Les identificateurs globaux d finis dans le fichier nom de fichier sont donc enregistr s dans leur propre module pas dans le module top comme pour la fonction load trace nom de fonction Apr s l ex cution de trace foo tous les appels la fonction globale nomm e foo vont tre trac s Cela signifie que l argument et le r sultat sont imprim s pour chaque appel ainsi que les exceptions qui s chappent de foo d clench es soit par foo elle m me soit par une des fonctions appel es depuis foo Si foo est une fonction curryfi e chaque argument est imprim quand il est pass la fonction untrace nom de fonction Ex cuter untrace foo supprime le m canisme de trace pour la fonction globale nomm e f
44. la valeur filtr e 1 6 6 Motifs de types somme Le motif constructeur non constant motif filtre toutes les valeurs de type somme dont le constructeur est gal a constructeur non constant et dont argument est filtr par motif Le motif motif motif filtre les listes non vides dont la t te filtre motif et dont la queue filtre motifs Ce motif est quivalent prefix motif motif Le motif motif motif filtre les listes de longueur n dont les l ments filtrent motif motif respectivement Ce motif est quivalent motif motif Ex SiC est un constructeur non constant le motif C x filtre les valeurs ayant C comme constructeur et lie x a la valeur argument de C Le motif t r filtre les listes non vides et lie t au premier l ment de la liste et r au reste de la liste Le motif _ 0 _ filtre les listes trois l ments ayant la valeur 0 en deuxi me position 1 6 7 Motifs n uplets Le motif motif motif filtre les n uplets dont les composantes filtrent les motifs motif motif respectivement Autrement dit ce motif filtre les n uplets de valeurs v1 Un tels que motif filtre v pour i 1 n D finition du langage Caml 17 Ex Le motif 1 x filtre toutes les paires dont le premier composant est l entier 1 et lie x la valeur du second composant 1 6 8 Motifs enregistrements Le motif tiquette motif tiquette motif filtre l
45. let on peut crire la place ident motif motif m expr Les deux formes lient ident la fonction curryfi e m arguments fun motif motif gt expr Ex let x 1 and y 2 in x y s value en l entier 3 let f x x 1 in f 3 s value en l entier 4 let x in x d clenche l exception Match_failure Les d finitions r cursives d identificateurs sont introduites par let rec let rec motif expr and and motifh expr in expr La seule diff rence avec la construction let est que les liaisons variables valeurs r alis es par le filtrage avec les motifs motif motif sont consid r es comme d j effectives quand les expressions expr expr sont valu es Les expressions expr expr peuvent donc faire r f rence aux identificateurs li s par les motifs motif motif et supposer qu ils ont la m me valeur que dans expr le corps de la construction let rec 22 Manuel de r f rence du langage Caml Ex let rec f function 0 gt 1 x gt x f x 1 in lie localement f la fonction factorielle sur les entiers positifs let rec f function 0 gt 1 x gt x g x and g x f x 1 lie f la fonction factorielle et g la fonction factorielle de son argument moins 1 Ce comportement des d finitions r cursives est garanti si les expressions expr expr sont des d finitions de fonctions fun ou function et les motifs motif motif r
46. lier du code qui appelle des fonc tions externes crites en C alors que vous utilisez le mode ex cutant stan dard Comme expliqu dans le chapitre 8 vous devez utiliser dans ce cas le mode ex cutant d di Rem de ajoutez l option custom ainsi que les bib lioth ques et fichiers objets qui impl mentent vos fonctions externes 4 Le syst me interactif camllight Ce chapitre d crit le syst me interactif de Caml Light qui permet une utilisation en direct au terminal du syst me Caml Light gr ce une boucle sans fin de lecture valuation impression Dans ce mode le syst me lit de mani re r p t e une phrase Caml Light la type la compile et l value puis imprime le type inf r et la valeur r sultat s il y en a une Le syst me imprime un di se en signe d invite en anglais prompt avant de lire chaque phrase Une phrase peut se prolonger sur plusieurs lignes et se termine obligatoirement par le double point virgule final Du point de vue du syst me de modules toutes les phrases entr es interactivement sont trait es comme si elles constituaient l impl mentation d un module unique nomm top Donc toutes les d finitions interactives sont enregistr es dans le module top Unix Le syst me interactif se lance par la commande camllight Les phrases sont Mac lues sur l entr e standard les r sultats sont imprim s sur la sortie standard les erreurs sur la sortie d er
47. lt bien entendu gt d clenche l exception Parse_error Le premier cas est s lectionn au vu du premier l ment bien mais le reste du flux ne filtre pas le reste du motif consent lt oui gt s value en true oui_ou_non est appliqu e ce flux et renvoie la valeur true qui filtre x Le deuxi me cas est s lectionn et r ussit consent lt euh non gt s value en false oui_ou_non d clenche Parse_failure sur ce flux puisque euh ne filtre ni oui ni non Le second cas est donc cart et on s lectionne le troisi me cas au vu de euh Le reste du filtrage r ussit consent lt euh eh bien gt d clenche Parse_error Le troisi me cas est s lectionn comme pr c demment mais le filtrage de lt eh bien gt par oui_ou_non choue par d clenchement de Parse_failure donc consent d clenche Parse_error consent lt une minute gt d clenche Parse_failure Aucun des cas de consent n est s lectionn puisque aucun des premiers composants ne filtre On se reportera l ouvrage Le langage Caml chapitres 9 et suivants pour une intro duction plus progressive aux flux et pour des exemples de leur application l criture d analyseurs syntaxiques et lexicaux Pour une pr sentation plus formelle des flux et une discussion d autres s mantiques possibles voir Parsers in ML par Michel Mauny et Daniel de Rauglaudre dans les actes de la conf rence A
48. m me syntaxe qu en Caml Light Reconnait la suite de caract res correspondante ensemble de caract res Reconna t tout caract re appartenant l ensemble de caract res donn Les en sembles de caract res valides sont un caract re litt ral c repr sentant l ensemble un seul l ment c un intervalle cy co repr sentant tous les caract res entre c et c2 inclus la concat nation de plusieurs ensem bles repr sentant l union de ces ensembles ensemble de caract res Reconna t n importe quel caract re unique n appartenant pas l ensemble de caract res donn expr R p tition Reconnait les concat nations de z ro une ou plusieurs chaines qui sont reconnues par expr expr R p tition stricte Reconnait les concat nations d une ou plusieurs chaines qui sont reconnues par expr expr Option Reconnait soit la chaine vide soit une chaine reconnue par expr expr expr Alternative Reconnait les cha nes reconnues par expr ou par expro expr expr Concat nation Reconnait les concat nations de deux cha nes la premi re re connue par expr la seconde par exprs expr Reconnait les m mes chaines que expr Les op rateurs et ont la plus forte priorit viennent ensuite puis la con cat nation et enfin l alternative 72 Manuel d utilisation du syst me Caml Light 7 2 4 Actions Les actions sont des expressi
49. manuel de r f rence du langage Caml et la documentation compl te du syst me Caml Light un environnement de programmation en Caml dis tribu e gratuitement Il s adresse des programmeurs Caml exp riment s et non pas aux d butants Il vient en compl ment du livre Le langage Caml des m mes auteurs chez le m me diteur qui fournit une introduction progressive au langage Caml et l criture de programmes dans ce langage Le pr sent ouvrage s organise comme suit e La partie I Manuel de r f rence du langage Caml documente pr cis ment la syntaxe et la s mantique du langage Caml La partie II Manuel d utilisation du syst me Caml Light explique comment utiliser les outils fournis par le syst me Caml Light un environnement de pro grammation en Caml e La partie III La biblioth que standard du syst me Caml Light d crit les fonctions offertes par cette biblioth que La partie IV Annexes explique comment installer le syst me Caml Light sur votre machine et fournit un index des mots cl s et des fonctions de biblioth que ainsi qu une bibliographie sur les langages de la famille ML Le syst me Caml Light Le syst me Caml Light dont il est question dans les parties II et III de cet ouvrage est un environnement de programmation en Caml fonctionnant la fois sur stations de travail Unix et sur micro ordinateurs Macintosh et PC des portages sont galement disponibles pour Atari ST et Ami
50. n ont pas la m me longueur value it_list2 Ca gt b gt c gt a gt a gt b list gt c list gt a it_list2 f a b1 bn ci cn vaut f f a bi ci b2 c2 bn cn D clenche Invalid_argument it_list2 si les deux listes n ont pas la m me longueur value list_it2 Ca gt b gt c gt c gt a list gt b list gt c gt c list_it2 f al an bi bn c vaut f al b1 f a2 b2 f an bn c D clenche Invalid_argument list_it2 si les deux listes n ont pas la m me longueur value flat_map a gt b list gt a list gt b list flat_map f 11 ln vaut f 11 f 12 f In value for_all a gt bool gt a list gt bool for_all p ai an vaut p al amp p a2 amp amp p an value exists a gt bool gt a list gt bool exists p al an vaut p al or p a2 or or p an value mem a gt a list gt bool mem a 1 est vrai si et seulement si a est structurellement gal au sens de la fonction du module eq section 9 4 un l ment de 1 value memq a gt a list gt bool memq a 1 est vrai si et seulement si a est physiquement gal au sens de la fonction du module eq section 9 4 un l ment de 1 value except a gt a list gt a list except a 1 renvoie la liste 1 priv e
51. read_key et false sinon Si key_pressed renvoie true le prochain appel read_key ren verra un caract re sans attente Son value sound int gt int gt unit sound freq dur met un son de fr quence freq en hertz pendant une dur e dur en millisecondes Sur le Macintosh pour d obscures raisons techniques la fr quence est arrondie la note la plus proche de la gamme temp r e IV Annexes 12 Instructions d installation Ce chapitre vous explique comment installer Caml Light sur votre machine 12 1 La version Unix Mat riel n cessaire Toute machine fonctionnant sous le syst me d exploitation Unix avec un espace d adressage non segment sur 32 ou 64 bits 4M de RAM 2M d espace disque libre La biblioth que graphique n cessite le syst me de fen trage X11 version 4 ou 5 Installation La version Unix est distribu e sous forme de code source en un fichier compress au format tar nomm cl6unix tar Z Pour l extraire allez dans le r pertoire o vous voulez mettre les fichiers source transf rez le fichier cl6unix tar Z et ex cutez la commande zcat cl6unix tar Z tar xBf qui extrait les fichiers dans le r pertoire courant Le fichier INSTALL explique en d tail comment configurer compiler et installer Caml Light Lisez le et suivez les instructions Probl mes Le fichier INSTALL explique les probl mes d installation couramment ren contr s 12 2 La version Macintosh Mat
52. sembler ne pas produire de r sultats ou ses sorties peuvent tre tronqu es Fonctions de sorties sur la sortie standard value print_char char gt unit Imprime un caract re sur la sortie standard value print_string string gt unit Imprime une chaine sur la sortie standard value print_int int gt unit Imprime un entier en d cimal sur la sortie standard value print_float float gt unit Imprime un flottant en d cimal sur la sortie standard value print_endline string gt unit Imprime une chaine suivie par un caract re saut de ligne sur la sortie standard value print_newline unit gt unit Imprime un caract re saut de ligne sur la sortie standard et vide cette derni re 102 La biblioth que standard du syst me Caml Light Fonctions de sorties sur la sortie standard error value prerr_char char gt unit Imprime un caract re sur la sortie d erreur standard value prerr_string string gt unit Imprime une cha ne sur la sortie d erreur standard value prerr_int int gt unit Imprime un entier en d cimal sur la sortie d erreur standard value prerr_float float gt unit Imprime un flottant en d cimal sur la sortie d erreur standard value prerr_endline string gt unit Imprime une cha ne suivie d un caract re saut de ligne sur la sortie d erreur standard et vide cette derni re Fonctions d entr e sur l entr e standard value read_line unit
53. seule fois lors du premier acc s les acc s suivants utilisent directement la valeur calcul e la premi re fois Ex L expression lt 1 0 gt s value sans d clencher l exception Division_by_zero L exception ne se d clenche qu au moment o on acc de au premier l ment de ce flux lors d un filtrage motif de flux lt gt lt composant composant gt composant motif expr motif ident Les motifs de flux galement parenth s s par lt et gt d crivent des segments initiaux de flux un motif de flux filtre tous les flux dont les premiers l ments sont de la forme sp cifi e par le motif de flux mais ces premiers l ments peuvent tre suivis par un nombre arbitraire d l ments quelconques En particulier le motif de flux lt gt filtre tous les flux Le filtrage s effectue s quentiellement sur chaque composant du motif de flux de la gauche vers la droite Chaque composant filtre un segment initial du flux puis si le filtrage r ussit retire du flux les l ments filtr s Le composant suivant va donc filtrer les l ments suivants du flux Le filtrage de flux op re destructivement quand un l ment est filtr il est supprim du flux par modification physique Le composant motif filtre le premier l ment du flux par le motif motif Le composant expr motif applique la fonction d not e par expr au flux courant puis filtre par motif le r sultat de la fonc
54. soit automatiquement compl t en foo__x 4 4 Erreurs courantes Cette section d crit et explique les messages d erreur les plus fr quents Cannot find file nom de fichier Impossible de trouver le fichier nom de fichier 58 Manuel d utilisation du syst me Caml Light Le fichier indiqu n a pas t trouv dans le r pertoire courant ni dans les r pertoires du chemin d acc s Si nom de fichier est de la forme mod zi cela veut dire que la phrase courante fait r f rence des identificateurs du module mod mais que vous n avez pas encore compil d interface pour ce module mod Rem des ou bien chargez le fichier mod m1 avec la fonction load ce qui construira en m moire l interface compil e du module mod ou bien utilisez camlc pour compiler mod mli ou mod m1 de fa on cr er l interface compil e mod zi avant de lancer le syst me interactif Si nom de fichier est de la forme mod zo cela veut dire que vous tentez de charger avec load_object un fichier de code qui n existe pas encore Rem des compilez mod ml1 avec camlc avant de lancer le syst me interactif ou bien utilisez load au lieu de load_object pour charger le code source au lieu d un fichier compil Si nom de fichier est de la forme mod ml cela veut dire que load ou include ne peut pas trouver le fichier source sp cifi Rem de v rifiez l orthographe du nom du fichier ou crivez le s il n existe pas mod__nom is reference
55. sortie standard Les d finitions de valeur lient des variables de valeur globales de la m me mani re qu une expression let in lie des variables locales Les expressions sont valu es et leurs valeurs sont filtr es par les parties gauches du signe comme d crit dans la section 1 7 6 Si le filtrage r ussit les liaisons des identificateurs aux valeurs effectu es au cours du filtrage sont interpr t es comme des liaisons de valeurs aux variables globales dont le nom local est l identificateur et dont le nom de module est le nom du module Si le filtrage choue l exception Match_failure est d clench e La port e de ces liaisons est l ensemble des phrases qui suivent cette d finition de valeur dans l impl mentation du module Ex La phrase let succ x x 1 lie le nom global succ la fonction successeur sur les entiers Les d finitions de type et d exception introduisent des constructeurs de type des constructeurs de valeurs et des tiquettes d enregistrement comme d crit dans les parties 1 8 1 et 1 8 2 La port e de ces d finitions est l ensemble des phrases qui suivent la d finition dans l impl mentation du module L valuation d une phrase d impl mentation r duite une d finition de type ou d exception ne produit aucun effet l ex cution Les directives modifient le comportement du compilateur sur les phrases suivantes de l impl mentation du module comme indiqu dans la sec
56. try f x with Division_by_zero gt 0 renvoie le r sultat de f x si l application de f x ne d clenche pas d exception Si l application de f x d clenche l exception Division_by_zero l expression try tout enti re s value en 0 Si f x d clenche une exception autre que Division_by_zero l expression try d clenche la m me exception try f x with Failure s gt print _ string s raise Failure s exc gt print_string Exception raise exc se comporte comme l application f x m me valeur r sultat m mes exceptions d clench es mais affiche un message si une exception se d clenche argument de l exception si l exception est Failure ou un message par d faut sinon 1 7 13 Produits L expression expr expr S value en le n uplet des valeurs des expressions expr expr L ordre d valuation des sous expressions n est pas sp cifi Ex 1 1 2 2 s value en la valeur 2 4 D finition du langage Caml 25 1 7 14 Sommes L expression constructeur non constant expr s value en la valeur de type somme dont le constructeur est constructeur non constant et dont l argument est la valeur de expr Ex Si C est un constructeur non constant l expression C 1 2 s value en la valeur C 3 Les listes disposent d une syntaxe sp ciale expression expr expr repr sente l application du constructeur prefix expr expr et donc s value en la liste dont la t t
57. type somme r cursif liste un param tre isomorphe au type des listes Types enregistrement La d finition de type params ident def tiquette def tiquette d finit un type enregistrement Les d finitions d tiquettes def tiquette def tiquette d crivent les tiquettes associ s au type enregistrement La d finition d tiquette ident exprtype d clare le nom local ident dans le module en cours de compilation comme une tiquette dont l argument a le type exprtype La d finition d tiquette mutable ident exprtype se comporte de fa on analogue mais elle autorise de plus la modification physique de l argument de l tiquette Ex type variable nom string mutable valeur int d finit le type variable comme un type enregistrement deux champs un champ nom contenant une valeur de type string ne pouvant pas tre modifi e en place et un champ valeur contenant une valeur de type int pouvant tre modifi e en place par la construc tion x valeur lt n type variable nom string mutable valeur valeur and valeur Inconnue Connue of int Meme of variable d finit un type enregistrement variable et un type somme valeur de fa on mutuellement r cursive Abr viations de type La d finition de type params ident exprtype d finit le constructeur de type ident comme une abr viation pour l expression de type exprtype Ex Apr s la d finition type a endo a g
58. un fichier de code qui n existe pas encore Rem de compilez mod m1l d abord Si votre programme est r parti sur plusieurs r pertoires cette erreur appara t si vous n avez pas sp cifi ces r pertoires dans le chemin d acc s Rem de ajoutez les options I ad quates sur la ligne de commande Corrupted compiled interface file nom de fichier Le fichier d interface compil e nom de fichier est corrompu 48 Manuel d utilisation du syst me Caml Light Le compilateur produit cette erreur quand il lit un fichier d interface compil e fichier zi qui n a pas la bonne structure Cela signifie que l criture de ce fichier zi n a pas eu lieu correctement par exemple le disque tait plein ou le compilateur a t interrompu au milieu de la cr ation du fichier Cette erreur intervient galement quand un fichier zi est modifi apr s sa cr ation par le compilateur Rem de effacez le fichier zi corrompu et recr ez le Expression of type t cannot be used with type t2 Cette expression de type t ne peut tre utilis e avec le type t2 C est erreur de typage la plus fr quente Le type t est le type inf r pour Vexpression la partie du programme qui accompagne le message d erreur en examinant l expression elle m me Le type t2 est le type attendu par le contexte de l expression il est d duit par examen des utilisations de la valeur de cette ex pression dans le reste du programme Si les
59. 0 yellow 130
60. 0 ref module 109 ref type 109 remove 119 126 rename 126 replace_string 111 rev 106 rgb 130 rhs_end 121 rhs_start 121 s_irall 125 s_irgrp 125 s_iroth 125 s_irusr 125 s_isgid 125 s_isuid 125 Index s_iwall 125 s_iwgrp 125 s_iwoth 125 s_iwusr 125 s_ixall 125 s_ixgrp 125 s_ixoth 125 s_ixusr 125 seek_in 106 seek_out 104 set_color 130 set_font 131 set_line_width 131 set_nth_char 110 set_text_size 131 sin 98 size_x 129 size_y 129 snd 108 sort 123 sort module 123 sound 133 spec type 116 split 108 sqrt 98 stack module 124 status type 132 std_err 101 std_in 101 std_out 101 stderr 101 stdin 101 stdout 101 stream module 109 stream type 109 stream_check 110 stream_from 110 stream_get 110 stream_next 110 stream_of_channel 110 153 stream_of_string 110 string module 110 string type 94 string_for_read 112 string_length 110 string_of_float 98 string_of_int 100 sub_float 97 sub_int 99 sub_string 111 sub_vect 112 subtract 108 succ 99 symbol _end 120 symbol_start 120 sys module 124 Sys_error exception 124 take 123 tan 98 text_size 131 t1 106 token type 117 toplevel module 54 trace 55 transp 132 union 108 unit type 94 untrace 55 vect module 112 vect type 94 vect_assign 112 vect_item 112 vect_length 112 vect_of_list 114 wait_next_event 133 white 13
61. 12 est l identificateur de nom f suivi de l entier litt ral 12 8 Manuel de r f rence du langage Caml 1 1 8 Commentaires Les commentaires commencent par les deux caract res et se terminent par les deux caract res x Il ne doit pas y avoir de blancs entre et ni entre et Les commentaires sont trait s comme des blancs ils ne sont pas significatifs mais s parent les identificateurs litt raux ou mots cl s cons cutifs Les s quences et ne sont pas reconnues comme d buts ou fins de commentaires lorsqu elles apparais sent l int rieur de cha nes de caract res litt rales Les commentaires embo t s un commentaire l int rieur d un autre sont accept s et correctement trait s Ex 1 commentaire 2 est lu comme 1 2 f commentaire x est lu comme f x 1 commen tai re 2 est lu comme 1 2 Le premier ne termine pas le commentaire introduit par le premier Aucun texte n est mis en commentaire dans f x car les deux s quences x et sont l int rieur de cha nes litt rales 1 commen taire 2 est lu comme 1 2 Le entre guillemets ne termine pas le commentaire puisqu il est l int rieur d une cha ne litt rale 1 1 9 Ambiguit s Les ambiguit s lexicales sont r solues en suivant la r gle du plus long pr fixe quand une suite de caract res peut tre d compos e en deux entit s lexicales encore appel es lex mes ou tokens de plusie
62. 386 et 386MAX De m me EMM386 EXE distribu avec MS DOS fonctionne parfaite ment pourvu que vous ne l appeliez pas avec l option NOEMS Si vous faites tourner votre PC 80386 sous un gestionnaire m moire au standard VCPI configurez le gestionnaire m moire pour qu il alloue au moins 1M de EMS de pr f rence 2M ou plus encore Caml Light tourne lentement et fait beaucoup d acc s disque Quand Caml Light ne peut pas allouer la m moire dont il a besoin il commence paginer sur un fichier du disque dur ce qui ralentit consid rablement l ex cution Pour viter ce ph nom ne assurez vous que Caml Light dispose d au moins 1M de m moire de pr f rence 2M Caml Light utilise la m moire EMS si vous employez un gestionnaire m moire au standard VCPI et la m moire XMS sinon Si vous employez un gestionnaire m moire VCPI v rifiez sa configuration pour tre str que Caml Light peut allouer assez de m moire EMS 13 Bibliographie Pour le lecteur qui d sire approfondir certains aspects du langage ML nous in diquons ici quelques livres et rapports de recherche sur ce sujet 13 1 Programmer en ML Les livres suivants sont des cours de programmation dont le support est ML Sans pour autant d crire ML de mani re exhaustive ils fournissent de bonnes introductions au langage ML Certains sont crits en Standard ML et non pas en Caml Pierre Weis et Xavier Leroy Le langage Caml InterEditions 1993 Le compl
63. CM Lisp and Functional Programming 1992 2 2 Motifs intervalles Caml Light reconna t les motifs de la forme c d deux caract res litt raux s par es par deux points comme une abr viation du motif ee Er Fer E IT CRE SE O C1 C2 Cn sont les caract res qui se trouvent entre c et d dans l ensemble des caract res ASCII Par exemple le motif 0 9 filtre tous les chiffres 2 3 D finitions r cursives de valeurs En plus des d finitions let rec de valeurs fonctionnelles d crites au chapitre 1 Caml Light autorise une certaine classe de d finitions r cursives de valeurs non fonc tionnelles Par exemple la d finition let rec x 1 y and y 2 x est 38 Manuel de r f rence du langage Caml accept e son valuation lie x la liste cyclique 1 2 1 2 et y la liste cyclique 2 1 2 1 Informellement les d finitions accept es sont celles o les variables d finies n apparaissent qu au sein du corps d une fonction ou bien constituent un champ d une structure de donn es De plus les motifs des membres gauches doivent tre des identificateurs rien de plus compliqu 2 4 Types somme mutables L argument d un constructeur de valeur peut tre d clar mutable c est dire mod ifiable en place lors de la d finition du type type foo of mutable int B of mutable int int La modification en place de la partie argument d une va
64. Not_found D clench e par certaines fonctions de recherche quand l objet cherch est introu vable exception Exit Cette exception n est pas d clench e par les fonctions de biblioth que Elle vous est fournie pour que vous l utilisiez dans vos programmes value failwith string gt a D clenche l exception Failure avec pour argument la cha ne donn e value invalid_arg string gt a 9 6 9 7 D clenche l exception Invalid_argument avec pour argument la cha ne donn e fchar op rations sur les caract res sans v rifications Ce module fournit les m mes fonctions que le module char section 9 3 mais ne fait pas de tests de bornes sur les arguments des fonctions Les fonctions sont donc plus rapides que celles du module char mais le programme peut faire n importe quoi si l on appelle une de ces fonctions avec des param tres incorrects c est a dire des param tres qui auraient d clench l exception Invalid_argument lors de l appel de la fonction correspondante du module char float op rations sur les nombres flottants Les caract ristiques des nombres flottants pr cision intervalle de valeurs repr sentables mode d arrondi d pendent de l impl mentation et de la machine Autant que possible l impl mentation essaye d utiliser des flottants double pr cision la norme IEEE Le comportement des op rations flottantes en cas de d bordement est non sp cifi v
65. Tous les caract res d un identificateur sont significatifs D finition du langage Caml 5 Ex Les identificateurs suivants sont valides x Y toto v12 x 1 valeur_x Les identificateurs suivants sont invalides 3x _x x ne commencent pas par une lettre valeur__de__x contient la s quence __ 1 1 2 Entiers litt raux 0 9 Ox OX 0 9 A F a f t 0o 00 0 7 Ob OB 0 1 entier litt ral Al H H El Un entier litt ral aussi appel constante enti re est une suite d un ou plusieurs chiffres optionnellement pr c d e d un signe moins Par d faut les entiers litt raux sont lus en base 10 Les pr fixes suivants permettent de changer la base Ox OX hexad cimal base 16 00 00 octal base 8 Ob OB binaire base 2 Le 0 initial est le chiffre z ro le 0 des constantes octales est la lettre O La signification des entiers litt raux qui sortent de l intervalle des nombres entiers repr sentables est non sp cifi e L intervalle des nombres entiers repr sentables contient au moins les entiers de 2 9 230 1 c est dire de 1073741824 1073741823 L impl mentation peut autoriser un intervalle plus grand de nombres entiers Ex 123 repr sente l entier 123 456 repr sente l entier 456 OxAB4C Oxab4c OXAb4C repr sentent l entier 43852 00207 repr sente l entier 135 0b101110001 repr sente l entier 369
66. V2 6 1 fichier doc tar Z Une br ve description du premier syst me Caml dont Caml Light est issu Sup pose une certaine familiarit avec Lisp Pierre Weis et al The CAML reference manual version 2 6 1 Rapport tech nique 121 INRIA 1990 Disponible par FTP anonyme sur ftp inria fr r pertoire lang cam1 V2 6 1 fichier doc tar Z Le manuel du premier syst me Caml dont Caml Light est issu Michael J Gordon Arthur J Milner et Christopher P Wadsworth Edinburgh LCF Lecture Notes in Computer Science volume 78 Springer Verlag 1979 Ce livre est la premi re description publi e du langage ML l poque o il n tait rien de plus que le langage de contr le d un d monstrateur de th or mes le syst me LCF Ce livre est maintenant d pass puisque le langage ML a beaucoup volu depuis mais reste d int r t historique Bibliographie 147 e Paul Hudak Simon Peyton Jones et Philip Wadler Report on the programming language Haskell version 1 1 Rapport technique universit de Yale 1991 Egalement publi dans le journal SIGPLAN Notices de mai 1992 volume 27 num ro 5 Haskell est un langage purement fonctionnel dont la s mantique est paresseuse et qui a de nombreux points communs avec ML pleine fonctionnalit typage poly morphe mais poss de aussi des traits propres int ressants surcharge dynamique aussi appel e classes 13 3 Impl mentation des langages de programmation fonctionne
67. XE Donc si l on nomme le fichier produit caml_out exe vous pouvez le lancer par caml_out arg arg2 ATQn En fait le fichier produit caml_out exe est form d un petit fichier ex cutable pr c dant le code compil Cet ex cutable lance simplement la commande camlrun sur le reste du fichier Ce qui fait que caml_out exe n est pas un ex cutable ind pendant il a encore besoin que camlrun exe r side dans l un des r pertoires du chemin d acc s Options Les options suivantes peuvent appara tre sur la ligne de commande C Compilation seulement Supprime la phase d dition de liens Les fichiers source produisent des fichiers compil s mais il n y a pas cr ation de fichier ex cutable Cette option sert compiler des modules s par ment Compilation ind pendante camlc 45 custom dition de liens en mode ex cutant d di en anglais custom runtime Dans le mode par d faut l diteur de liens produit du code ex cutable par l ex cutant standard camlrun Dans le mode ex cutant d di l diteur de liens produit un fichier qui contient la fois le code d un ex cutant d di et le code pour le pro gramme Le fichier r sultant est consid rablement plus gros mais compl tement ind pendant cette fois En particulier il est directement ex cutable m me si la commande camlrun n est pas install e De plus le mode ex cutant d di per met de lier du code Caml Light
68. Xavier Leroy Pierre Weis MANUEL DE REFERENCE DU LANGAGE CAML Copyright 1992 1993 2009 Pierre Weis et Xavier Leroy Ce texte est distribu sous les termes de la licence Creative Commons BY NC SA Le texte complet de la licence est disponible l adresse suivante http creativecommons org licenses by nc sa 2 0 fr legalcode Voici un r sum des droits et conditions de cette licence e Vous tes libres de reproduire distribuer et communiquer cette cr ation au public de modifier cette cr ation e Selon les conditions suivantes Paternit Vous devez citer le nom de l auteur original de la mani re indiqu e par l auteur de l oeuvre ou le titulaire des droits qui vous conf re cette autorisation mais pas d une mani re qui sugg rerait qu ils vous soutiennent ou approuvent votre utilisation de l oeuvre Pas d Utilisation Commerciale Vous n avez pas le droit d utiliser cette cr ation des fins commerciales Partage des Conditions Initiales l Identique Si vous modifiez transformez ou adaptez cette cr ation vous n avez le droit de distribuer la cr ation qui en r sulte que sous un contrat identique celui ci e chaque r utilisation ou distribution de cette cr ation vous devez faire ap paraitre clairement au public les conditions contractuelles de sa mise a disposition La meilleure mani re de les indiquer est un lien la page Web ci dessus e Chacune de ces con
69. __nomLocal soit des identificateurs non qualifi s qui sont automa tiquement compl t s en examinant la liste des modules ouverts comme d crit dans la section 1 2 du chapitre 1 Les modules ouverts au lancement sont list s dans la doc umentation de la biblioth que standard chapitre 9 D autres modules peuvent tre ouverts par la suite avec la directive open Dans tous les cas avant de faire r f rence une variable globale d un module diff rent du module top une d finition de cette variable globale doit pr alablement avoir t mise en m moire Au d part le syst me interactif contient les d finitions de tous les identificateurs de la biblioth que standard Les d finitions des modules de l utilisateur peuvent tre introduites avec les fonctions load ou load_object d crites la section 4 2 Faire r f rence une variable globale pour laquelle aucune d finition n a t fournie par load ou load_object provoque l erreur Identifier is referenced before being defined l identificateur est mentionn avant d avoir t d fini Pour bien faire comprendre ces deux points qui ren dent l utilisation interactive des modules un peu d licate voyons quelques exemples typiques 1 La fonction de biblioth que sub_string est d finie dans le module string Ce module fait partie de la biblioth que standard et c est un des modules automa tiquement ouverts au lancement Donc les deux phrases sub
70. _string qwerty 1 3 string__sub_string qwerty 1 3 sont correctes sans n cessit d utiliser open load ou load_object 2 La fonction de biblioth que printf est d finie dans le module printf Ce module fait partie de la biblioth que standard mais il n est pas automatiquement ouvert au lancement Donc la phrase printf__printf s 4s hello world est correctement ex cut e tandis que printf s s hello world produit l erreur Variable printf is unbound la variable printf n est pas li e puisque aucun des modules ouverts pour l instant ne d finit un global avec pour nom local printf Cependant open printf printf s s hello world marche sans probl me Le syst me interactif camllight 57 3 Supposez que le fichier foo ml1 se trouve dans le r pertoire courant et contienne la seule phrase let x 1 Quand le syst me interactif d marre toute r f rence x produira l erreur Variable x is unbound la variable x n est pas li e Une r f rence a foo__x produira l erreur Cannot find file foo zi impossible de trouver le fichier foo zi puisque le v rificateur de types cherche charger l interface compil e du module foo pour trouver le type de x Pour charger en m moire le module foo faites simplement load foo Les r f rences foo__x seront alors typ es et valu es correctement Puisque load n ouvre pas le module qu
71. a pas de valeur associ e a dans la liste 1 value assq a gt a b list gt b M me comportement que assoc mais compare les clefs avec l galit physique au lieu de l galit structurelle value mem_assoc a gt a b list gt bool N Similaire assoc mais renvoie simplement true s il existe une liaison pour la clef donn e et false sinon 9 13 pair op rations sur les paires value fst a b gt a Renvoie la premi re composante d une paire value snd a b gt b Renvoie la seconde composante d une paire value split a b list gt a list b list Transforme une liste de paires en une paire de listes split al b1 an bn vaut al an b1 bn value combine a list b list gt a b list Transforme une paire de listes en une liste de paires combine ai an b1 bn vaut al b1 an bn D clenche Invalid_argument combine si les deux listes n ont pas la m me longueur La biblioth que de base 109 value map_combine Ca b gt c gt a list b list gt c list map_combine f ai an b1 bn vaut f ai b1 f an bn D clenche invalid_argument map_combine si les deux listes n ont pas la m me longueur value do_list_combine Ca b gt c gt a list b list gt unit do_list_combine f ai an
72. accents graves d limitent soit un caract re diff rent de et soit l une des s quences d chappement suivantes S quence Caract re d not barre oblique backslash Ne accent grave backquote n saut de ligne LF line feed r retour chariot CR carriage return t tabulation horizontale TAB b retour arri re BS backspace ddd le caract re dont le code ASCII est ddd en d cimal Ex a repr sente le caract re a repr sente le caract re accent grave n est le caract re saut de ligne 098 est le caract re b fab 7 98 1234 ne sont pas des caract res litt raux valides 1 1 5 Cha nes de caract res litt rales cha ne litt rale caract re de chaine caract re normal VA n tb x 0 9 0 9 0 9 caract re de chaine Les cha nes de caract res litt rales sont encadr es par des caract res guillemets doubles Les deux guillemets d limitent une suite de caract res diff rents de et de ou de s quences d chappement D finition du langage Caml 7 S quence Caract re d not 4X barre oblique backslash x guillemet n saut de ligne LF line feed r retour chariot CR carriage return t tabulation horizontale TAB b retour arri re BS backspace ddd le caract re dont le code ASCII est ddd en d cimal L impl me
73. aire r f rence aux fonctions fournies par ces modules sans ajouter de directives open La liste des modules ouverts automatiquement d pend de l option 0 donn e au compi lateur ou au syst me interactif Option 0 Modules ouverts dans l ordre dans lequel ils sont parcourus pendant la compl tion 0 cautious io eq int float ref pair list vect cas par d faut char string bool exc stream builtin 0 fast io eq int float ref pair list fvect fchar fstring bool exc stream builtin 0 none builtin Conventions Pour faciliter la recherche les modules sont pr sent s par ordre alphab tique Pour chaque module les d clarations de son fichier d interface sont imprim es une par une en police machine a crire suivie chacune par un court commentaire Tous les modules et les identificateurs qu ils exportent sont index s la fin de cet ouvrage 94 La biblioth que standard du syst me Caml Light 9 1 bool op rations sur les bool ns value prefix not bool gt bool La n gation bool enne 9 2 builtin types et constructeurs de base Ce module d finit des types et des exceptions correspondant des constructions syntaxiques du langage qui jouent donc un r le particulier dans le compilateur type int type float type string type char Les types des nombres entiers des nombres en virgule flottante des chaines de caract res et des caract res respectivement t
74. alue int_of_float float gt int Convertit un flottant en un entier Si le flottant est positif ou nul il est tronqu l entier imm diatement inf rieur ou gal Le r sultat n est pas sp cifi si Vargument est n gatif ou si l argument tombe en dehors de l intervalle des entiers repr sentables value float_of_int int gt float Convertit un entier en flottant value minus float gt float value minus_float float gt float Oppos La biblioth que de base 97 value prefix float gt float gt float value prefix float gt float gt float value add_float float gt float gt float Addition value prefix float gt float gt float value prefix float gt float gt float value sub_float float gt float gt float Soustraction value prefix float gt float gt float value prefix float gt float gt float value mult_float float gt float gt float Multiplication value prefix float gt float gt float value prefix float gt float gt float value div_float float gt float gt float Division Comportement non sp cifi si le dividende est 0 0 value eq_float float gt float gt bool value prefix float gt float gt bool galit flottante quivalente l galit g n rique mais un peu plus efficace value neq_float float gt float gt bool value prefix lt gt float gt float
75. alue unit return value initscr On a le droit de convertir directement de WINDOW value Communication entre Caml Light et C 89 puisque le r sultat de initscr est un bloc cr par malloc value curses_wrefresh win value win wrefresh value win return Val_unit Ou Atom O value curses_newwin nlines ncols x0 y0 value nlines ncols x0 y0 return value newwin Int_val nlines Int_val ncols Int_val x0 Int_val y0 value curses_addch c value c addch Int_val c Les caract res sont cod s par des entiers return Val_unit value curses_addstr s value s addstr String_val s return Val_unit L exemple continue sur plusieurs pages En fait il serait plus astucieux de cr er une biblioth que pour ce code enveloppe avec chaque fonction enveloppe dans un fichier s par pour que l diteur de liens puisse extraire de la biblioth que curses les seules fonctions effectivement utilis es par le programme Caml Light Le fichier curses c peut tre compil avec le compilateur C cc c I usr local lib caml light curses c ou plus simplement avec le compilateur de Caml Light camlc c curses c Quand on lui passe un fichier c la commande camlc appelle tout simplement cc sur ce fichier avec la bonne option I Et maintenant voici un exemple simple de programme Caml Light qui utilise le module curses open curses
76. alyse syntaxique engendr Voir la description de camlyacc la sec tion 7 3 7 2 Syntaxe des d finitions d analyseurs lexicaux Les d finitions d analyseur lexicaux se pr sentent comme suit pr lude rule point d entr e parse expression rationnelle action ass expression rationnelle action and point d entr e parse and Les commentaires sont d limit s par et comme en Caml Light 7 2 1 En t te La section pr lude est form e d un texte Caml Light arbitraire entour d accolades Il peut tre omis S il est pr sent le texte entour est copi tel quel au d but du fichier produit Typiquement cette section d en t te contient les directives open n cessaires aux actions et ventuellement quelques fonctions auxiliaires utilis es dans les actions 7 2 2 Points d entr e Le noms des points d entr e doivent tre des identificateurs Caml Light valides G n rateurs d analyseurs camllex camlyacc 71 7 2 3 Expressions rationnelles Les expressions rationnelles sont analogues a celles de lex avec une syntaxe un peu plus proche de celle de Caml char Un caract re litt ral avec la m me syntaxe qu en Caml Light Reconnait le car act re correspondant au litt ral Reconnait n importe quel caract re eof Reconnait une condition de fin de fichier sur l entr e de l analyseur lexical cha ne Une cha ne litt rale avec la
77. aml Light et C 87 m moire la valeur racine est modifi e pour pointer vers la nouvelle adresse du bloc Push_roots r n doit apparaitre dans un bloc de programme C exactement entre la derni re d claration de variable locale et la premi re instruction du bloc Pour annuler Venregistrement des racines il faut appeler la macro Pop_roots avant de quitter le bloc C contenant Push_roots r n L enregistrement des racines est automatiquement annul si une exception Caml est d clench e R gle 3 L affectation directe d un champ d un bloc comme dans Field v n v nest s re que si v est un bloc nouvellement allou par alloc ou alloc_tuple c est dire si aucune allocation n a lieu entre l allocation de v et l affectation du champ Dans tous les autres cas ne faites jamais d affectation directe Si le bloc vient d tre allou par alloc_shr utilisez initialize pour affecter une valeur un champ pour la premi re fois initialize amp Field v n v Sinon si vous voulez modifier un champ qui contenait d j une valeur bien form e appelez la fonction modify modify amp Field v n v Pour illustrer les r gles pr c dentes voici une fonction C qui construit et retourne une liste form e des deux entiers re us en param tres value alloc_list_int il i2 int ii i2 value result Push_roots r 1 r 0 alloc 2 1 Alloue une cellule de liste Field r 0 0 Val_int i2 car
78. ans un autre r pertoire si leur nom de base est pr serv et si les options I ad quates sont donn es au compilateur Les fichiers de code compil fichiers zo en revanche peuvent tre librement renomm s une fois cr s D abord parce que les fichiers zo contiennent le vrai nom du module qu ils d finissent si bien qu il n est pas n cessaire de d duire ce nom partir du nom du fichier ensuite parce que l diteur de liens n essaie jamais de trouver par lui m me le fichier zo qui impl mente un module de nom donn il se repose sur l utilisateur qui fournit lui m me la liste des fichiers zo 3 4 Erreurs courantes Cette section d crit et explique les messages d erreur les plus fr quents Cannot find file nom de fichier Impossible de trouver le fichier nom de fichier Le fichier indiqu n a pas t trouv dans le r pertoire courant ni dans les r pertoires du chemin d acc s Le nom de fichier correspond soit un fichier d interface compil e fichier zi soit un fichier de code fichier zo Si nom de fichier est de la forme mod zi cela signifie que vous tentez de compiler un fichier qui fait r f rence a des identificateurs du module mod mais sans avoir pr alablement compil une interface pour le module mod Rem de compilez mod mli ou mod ml d abord pour cr er l interface compil e mod zi Si nom de fichier est de la forme mod zo cela veut dire que vous essayez de lier
79. aph 129 clear_parser 121 close 126 close_graph 129 close_in 106 close_out 104 color type 129 150 combine 108 command_line 125 compare_strings 112 compile 54 concat 116 concat_vect 112 copy_vect 113 cos 98 create_image 132 create_lexer 120 create_lexer_channel 120 create_lexer_string 120 create_string 111 current_dir_name 116 current_point 130 cyan 130 decr 109 dirname 117 div_float 97 div_int 99 Division_by_zero exception 98 do_list 106 do_list2 107 do_list_combine 109 do_stream 110 do_table 119 do_vect 114 draw_arc 130 draw_char 131 draw_circle 131 draw_ellipse 131 draw_image 132 draw_string 131 dump_image 132 Empty exception 122 124 End_of_file exception 101 end_of_stream 110 eq module 95 eq_float 97 eq_int 99 eq_string 111 event type 133 exc module 95 except 107 Annexes exceptq 107 exists 107 exit 101 125 Exit exception 96 exn type 94 exp 98 Failure exception 95 failwith 96 fchar module 96 file_perm type 125 filename module 116 fill_arc 131 fill_circle 131 fill _ellipse 131 fill_poly 131 fill_rect 131 fill_string 111 fill_vect 113 find 118 find_all 119 flat_map 107 float 123 float module 96 float type 94 float_of_int 96 float_of_string 98 flush 103 for_all 107 foreground 130 fprint 122 fprintf 121 fst 108 fstring module 98 fvect module 98
80. avec des fonctions C d finies par l utilisateur comme d crit au chapitre 8 Unix Ne jamais supprimer les symboles par la commande strip d un ex cutable produit avec l option custom PC Cette option n est pas impl ment e Mac Cette option n est pas impl ment e files fichier de r ponses 8 Traite les fichiers dont les noms sont list s dans le fichier fichier de r ponses comme si ces noms apparaissaient sur la ligne de commande Les noms de fichiers contenus dans fichier de r ponses sont s par s par des blancs espaces tabula tions ou sauts de ligne Cette option permet de circonvenir de sottes limitations sur la longueur de la ligne de commande Fait produire des informations de mise au point en anglais debugging par le com pilateur Lors de la phase d dition de liens cette option ajoute des informations la fin du fichier de code ex cutable produit Ces informations sont requises en particulier par le gestionnaire d exception du module printexc de la biblioth que standard section 10 7 Lors de la phase de compilation d une impl mentation fichier m1 l option g force le compilateur produire un fichier avec l extension zix d crivant tous les types et les valeurs globales d finies dans l impl mentations y compris celles qui sont locales l impl mentation c est dire non d crites dans l interface du module En conjonction avec l option g du syst me interactif c
81. camlrun se fait comme suit camlrun options code ex cutable arg arg2 argn Le premier argument non optionnel est consid r comme le nom du fichier qui contient le code ex cutable Ce fichier est cherch dans le chemin d acc s des ex cutables et dans le r pertoire courant Les arguments suivants sont pass s au programme Caml Light dans le tableau de chaines sys__command_line L l ment 0 de ce tableau est le nom du fichier de code ex cutable les l ments 1 n sont les autres arguments de la ligne de commande arg argn Comme mentionn dans le chapitre 3 dans la plupart des cas les fichiers de code ex cutables produits par la commande camlc sont auto ex cutables et savent lancer la commande camlrun eux m mes C est a dire que si caml out est un fichier de code ex cutable caml out arg arg2 argn se comporte comme camlrun caml out arg argg argn Notez qu il est impossible de passer des options camlrun en invoquant directement caml out 62 Manuel d utilisation du syst me Caml Light 5 2 Options Les options suivantes peuvent appara tre sur la ligne de commande de camlrun Il y a des options suppl mentaires pour contr ler le comportement du r cup rateur de m moire mais elles ne sont pas destin es l utilisateur normal v Force camlrun imprimer des messages de diagnostics relatifs l allocation et la r cup ration m moire Utile pour corriger les probl mes li s
82. contenue dans le n champ du bloc structur v Les champs sont num rot s de 0 Wosize_val v 1 Code_val v renvoie la partie code de la fermeture v Env_val v renvoie la partie environnement de la fermeture v string_length v renvoie la longueur nombre de caract res de la chaine v e Byte v n renvoie le n caract re de la cha ne v avec pour type char Les caract res sont num rot s de 0 string_length v 1 e Byte_u v n renvoie le n caract re de la cha ne v avec pour type unsigned char Les caract res sont num rot s de 0 string_length v 1 String_val v renvoie un pointeur vers le premier caract re de la cha ne v avec pour type char Ce pointeur est une cha ne C valide il y a toujours un caract re nul apr s le dernier caract re de la cha ne Malgr tout les cha nes de Caml Light peuvent contenir des caract res nuls n importe o ce qui trouble g n ralement les fonctions C travaillant sur les cha nes de caract res e Double_val v renvoie le flottant contenu dans la valeur v avec pour type double Les expressions Field v n Byte v n Byte_u v n et Double_val v sont des valeurs assignables en anglais l values valides On peut donc les affecter ce qui produit une modification physique de la valeur v Les affectations directes Field v n doivent tre faites avec prudence pour ne pas troubler le r cup rateur de m moire voir la section 8 5 Communica
83. ct car il contient deux occurrences du m me identifi cateur x 1 6 2 Motifs parenth s s Le motif motif filtre les m mes valeurs que motif Une contrainte de type peut appara tre l int rieur d un motif parenth s comme par exemple motif type Cette contrainte oblige le type de motif tre compatible avec type 16 Manuel de r f rence du langage Caml 1 6 3 Motifs constants Un motif r duit une constante filtre les valeurs qui sont gales cette constante Ex Le motif 3 filtre la valeur enti re 3 et aucune autre valeur Le motif filtre la liste vide et aucune autre valeur 1 6 4 Motifs ou Le motif motif motif repr sente le ou logique des deux motifs motif et motif Une valeur est filtr e par motif motif si elle est filtr e par motif ou par motifs Les deux sous motifs motif et motif ne doivent pas contenir d identificateurs Aucune liaison n est donc r alis e lors d un filtrage par un motif ou Ex Le motif 11213 filtre les valeurs enti res 1 2 et 3 uniquement valeur Le motif 1 x est incorrect car il contient l identificateur x 1 6 5 Motifs alias Le motif motif as ident filtre les m mes valeurs que motif Si le filtrage par motif r ussit l identificateur ident est li la valeur filtr e ce qui s ajoute aux liaisons r alis es lors du filtrage par motif Ex Le motif 112 as x filtre les valeurs 1 et 2 tout en liant x
84. ction curryfi e deux arguments c est dire une fonction qui prend une valeur vy et renvoie une fonction qui toute valeur vy associe la moyenne de vz et vy D finition du langage Caml 21 1 7 5 Application de fonctions L application de fonctions est d not e par simple juxtaposition de deux expressions L expression expr expr value les expressions expr et exprs L expression expr doit s valuer en une valeur fonctionnelle laquelle est alors appliqu e la valeur de exprs L ordre dans lequel les expressions expr et expr sont valu es n est pas sp cifi Ex function x gt x 1 2 s value en l entier 3 fun x y gt x y 2 1 s value en la fonction qui tout entier vy associe Ventier 1 v 2 1 7 6 Liaisons locales Les constructions let et let rec lient localement des identificateurs des valeurs La construction let motif expr and and motif expr in expr value expr expr dans un certain ordre non sp cifi puis filtre leurs valeurs par les motifs motif motif respectivement Si les filtrages r ussissent expr est valu e dans un environnement enrichi par les liaisons r alis es pendant les filtrages et la valeur de expr est renvoy e pour valeur de toute l expression let Si l un des filtrages choue l exception Match_failure est d clench e Variante syntaxique au lieu d crire ident fun motif motif m gt expr dans une expression
85. d exceptions des entr es sorties de base etc Les op rations de cet ensemble cautious font des tests de bornes lors des acc s aux cha nes et aux tableaux ainsi que de nombreuses v rifications de coh rence sur leurs arguments fast rapide fournit les m mes op rations que l ensemble cautious mais sans tests Les phrases compil es avec 0 fast sont donc un peu plus rapides mais ne sont plus s res 54 4 2 Manuel d utilisation du syst me Caml Light none rien supprime toutes les ouvertures automatiques de modules La compilation commence dans un environnement presque vide Cette option n est pas d usage g n ral Par d faut le syst me interactif se lance dans le mode 0 cautious Voir le chapitre 9 pour une liste compl te des modules des ensembles cautious et fast Fonctions de contr le du syst me interactif Le module toplevel de la biblioth que standard ouvert par d faut quand le syst me interactif est lanc fournit un certain nombre de fonctions qui contr lent le comportement du syst me interactif chargent des fichiers en m moire et tracent l ex cution des programmes quit O Quitte la boucle interactive et met fin la commande Caml Light include nom de fichier load Lit compile et ex cute les phrases source du fichier nom de fichier L extension ml est automatiquement ajout e a nom de fichier si elle en tait absente L inclusion est textuelle les phrases sont
86. d before being defined mod__nom est r f renc avant d avoir t d fini Vous avez oubli de charger en m moire une impl mentation de module avec load ou load_object Ce point a t expliqu de mani re d taill e dans la section 4 3 Corrupted compiled interface file nom de fichier Le fichier d interface compil e nom de fichier est corrompu Voir la section 3 4 Expression of type t cannot be used with type type t2 Cette expression de type t ne peut tre utilis e avec le type tz Voir la section 3 4 4 5 Construction de syst mes interactifs d di s camlmktop La commande camlmktop construit des syst mes Caml Light interactifs qui conti ennent du code de l utilisateur pr charg au lancement Mac Cette commande n est pas disponible dans la version Macintosh PC Cette commande n est pas disponible dans les versions PC La commande camlmktop prend pour argument un ensemble de fichiers zo et les lie avec les fichiers de code qui impl mentent le syst me interactif de Caml Light L utilisation typique est camlmktop o mytoplevel foo zo bar zo gee zo ce qui cr e le fichier de code mytoplevel contenant le syst me interactif de Caml Light plus le code des trois fichiers zo Pour lancer ce syst me interactif donnez le en argument la commande camllight Le syst me interactif camllight 59 camllight mytoplevel Ceci commence une session interactive normale si ce n est que
87. de la cha ne qui filtre la ni composante du membre droit de la r gle o n est l entier argument de rhs_start et rhs_end La premi re composante correspond n 1 value clear_parser unit gt unit Vide la pile de l analyseur syntaxique Appeler cette fonction au retour d une fonction d analyse syntaxique supprime tous les pointeurs contenus dans la pile de l analyseur li s des objets construits par les actions s mantiques lors de l analyse et d sormais inutiles Ce n est pas indispensable mais r duit les besoins en m moire des programmes 10 7 printexc affichage d exceptions impr vues value f Ca gt b gt a gt b f fn x applique fn x et renvoie le r sultat obtenu Si l valuation de fn x d clenche une exception le nom de l exception est imprim sur la sortie d erreur standard et le programme s arr te avec le code de sortie 2 L usage habituel est printexc__f main o main de type unit gt unit est le point d entr e d un programme ind pendant Ainsi l on peut rattraper et imprimer toutes les exceptions inattendues Pour que les exceptions soient correctement imprim es le programme doit avoir t li avec l option g du compilateur ind pendant 10 8 printf impression format e value fprintf out_channel gt string gt a fprintf sortie format argi argN met en forme les arguments arg1 argN en suivant le format de la cha ne forma
88. des ex pressions de paires e1 e2 il est dit explicitement que l ordre d valuation de e1 et e2 n est pas sp cifi Cela signifie qu une impl mentation de Caml peut choisir d valuer toujours e d abord ou toujours ez d abord ou encore varier l ordre d valuation sa guise Un programme qui fait l hypoth se que ez est valu e d abord comme c est le cas dans la version courante du syst me Caml Light d pend de l impl mentation et peut tr s bien donner des r sultats diff rents s il est ex cut par une autre impl mentation De m me les impl mentations peuvent offrir des directives et des constructions syn taxiques en plus de celles qui sont d crites ici mais ces extensions ne font pas par 4 Manuel de r f rence du langage Caml tie du langage Caml et peuvent changer ou dispara tre lors du passage une autre impl mentation alors que les constructions d crites dans ce chapitre sont garanties dans toutes les impl mentations de Caml Notations La syntaxe du langage est d crite dans une notation proche de la BNF Les symboles terminaux sont compos s en police machine crire comme ceci Ils repr sentent des suites de caract res qui apparaissent tels quels dans le texte du programme Les symboles non terminaux sont crits en italiques comme cela Ils sont d finis par des r gles de production de la forme nonterminal hello nonterminal Cette d finition se li
89. des programmes informatiques InterEditions 1989 Un cours de programmation remarquable enseign en Scheme le dialecte mod erne de Lisp M rite d tre lu m me si vous vous int ressez plus ML qu Lisp 13 2 Descriptions des dialectes de ML Les livres et rapports de recherche qui suivent sont des descriptions de diff rents langages de programmation de la famille ML Tous supposent une certaine familiarit avec ML Robert Harper Introduction to Standard ML Technical report ECS LFCS 86 14 Universit d Edimbourg 1986 Un aper u de Standard ML syst me de modules inclus Dense mais encore lisible Robin Milner Mads Tofte et Robert Harper The definition of Standard ML The MIT Press 1990 Une d finition formelle compl te de Standard ML dans le cadre de la s mantique op rationnelle structur e Ce livre est sans doute la d finition d un langage de programmation la plus math matiquement pr cise jamais crite Pour lecteurs connaissant parfaitement ML et que les math matiques n effraient pas Robin Milner et Mads Tofte Commentary on Standard ML The MIT Press 1991 Un commentaire sur le livre pr c dent qui tente d expliquer les parties les plus d licates et de motiver les choix conceptuels Un peu moins difficile a lire que la D finition Guy Cousineau et G rard Huet The CAML primer Rapport technique 122 INRIA 1990 Disponible par FTP anonyme sur ftp inria fr r pertoire lang caml
90. deux types t et t2 sont incompatibles le compilateur le signale par ce message d erreur Dans certains cas il est difficile de comprendre pourquoi les deux types t et t2 sont incompatibles Par exemple il arrive que le compilateur signale une expres sion de type foo qui ne peut pas tre utilis e avec le type foo et pourtant il semble bien que les deux types foo soient compatibles puisqu ils s crivent de la m me fa on Ce n est cependant pas toujours vrai Deux constructeurs de types peuvent avoir le m me nom mais en fait repr senter des types compl tement diff rents Cela arrive quand ce constructeur de type est red fini Exemple type foo B let f function A gt O B gt 1 type foo C D f C Ce programme produit l erreur expression C of type foo cannot be used with type foo Des types incompatibles avec le m me nom peuvent galement appara tre quand un module est modifi et recompil mais que certains de ses clients ne sont pas recompil s Ce ph nom ne est d au fait que les constructeurs de types qui apparaissent dans les fichiers zi ne sont pas repr sent s par leurs noms ce qui ne suffirait pas les identifier cause des red finitions de types mais par des marques uniques qui leur sont attribu es quand la d claration de type est compil e Prenons pour exemple les trois modules modi ml type t B let f function A gt O B gt 1 mod2 m
91. ditions peut tre lev e si vous obtenez l autorisation du titu laire des droits sur cette oeuvre e Rien dans ce contrat ne diminue ou ne restreint le droit moral de l auteur ou des auteurs Table des mati res Introduction I Manuel de r f rence du langage Caml 1 D finition du langage Caml 1 1 Conventions lexicales 1 2 Les noms globaux 1 3 Valeurs 1 4 Expressions de type 1 5 Constantes 1 6 Motifs 1 7 Expressions 1 8 D finitions de types et d exceptions 1 9 Directives 1 10 Impl mentations de modules 1 11 Interfaces de modules 2 Extensions propres 4 Caml Light 2 1 Flux analyseurs syntaxiques et imprimeurs 2 2 Motifs intervalles 2 3 D finitions r cursives de valeurs 2 4 Types somme mutables 2 5 Directives II Manuel d utilisation du syst me Caml Light 3 Compilation ind pendante camlc 3 1 Survol du compilateur 3 2 Options 3 3 Les modules et le syst me de fichier 3 4 Erreurs courantes 4 Le syst me interactif camllight 4 1 Options 4 2 Fonctions de contr le du syst me interactif 4 3 Le syst me interactif et le syst me de modules 4 4 Erreurs courantes 4 5 Construction de syst mes interactifs d di s camlmktop 41 43 43 44 47 47 51 53 54 56 57 58 vi 4 6 Options 5 L ex cutant camlrun 5 1 5 2 5 3 Vue d ensemble Options Erreurs courantes 6 Le gestionnaire de biblioth ques camllibr 6 1 6 2 6 3 Vue d ensemble Options Transformer du code en une bib
92. e nom abr g ou encore nom non qualifi L identificateur sp cifie la partie nom local du nom global Le nom du module d finissant ce global est omis Le compilateur le d duit du contexte en appliquant les r gles de compl tion du paragraphe suivant 1 2 2 Ex list__map repr sente le nom global d fini dans le module list sous le nom local map sub_string repr sente un nom global dont le nom local est sub_string et dont le module de d finition va tre d termin par le compilateur en suivant les r gles de compl tion 1 2 2 Compl tion des noms abr g s Pour compl ter un nom abr g le compilateur examine une liste de noms de mod ules appel s modules ouverts pour d terminer si l un d entre eux d finit un nom global dont la partie nom local est gale au nom abr g Si c est le cas il compl te le nom abr g par le nom du module ouvert qui le d finit Si aucun module ouvert ne con vient le compilateur signale une erreur Si plusieurs modules ouverts conviennent le compilateur choisit celui qui apparait en premier dans la liste des modules ouverts La liste des modules ouverts contient toujours en t te le nom du module en cours de compilation qui est donc toujours examin le premier Dans le cas d une impl mentation a base de boucle interactive c est le module qui contient toutes les d finitions entr es au clavier Elle comprend aussi un certain nombre de modules de biblioth que
93. e nom de module de ce constructeur de type est le nom du module en cours de compilation Les ventuels param tres de type sont soit une variable de type ident dans le cas d un constructeur de types avec un param tre soit une liste de variables de types ident ident dans le cas d un constructeur de types avec plusieurs param tres Ces param tres de type peuvent appara tre dans les expressions de type du membre droit de la d finition Types somme La d finition de type params ident def constr def constr d finit un type somme Les d finition de constructeurs def constr def constr d crivent les con D finition du langage Caml 29 structeurs associ s au type somme La d finition de constructeur ident of exprtype d clare le nom local ident du module en cours de compilation en tant que construc teur non constant dont l argument est de type exprtype La d finition de constructeur ident d clare le nom local ident du module en cours de compilation en tant que constructeur constant Ex type direction Nord Sud Est Ouest d finit direction comme un type somme quatre constructeurs constants type a option None Some of a d finit option comme un type somme param tr par le type a comprenant un constructeur constant None et un con structeur non constant Some dont l argument a le type a type a liste Vide Cellule of a a liste d finit un
94. e d expressions rationnelles en anglais regular ex pressions accompagn es d actions s mantiques et camlyacc qui produit un analyseur syntaxique partir d une grammaire accompagn e d actions s mantiques Ces g n rateurs de programmes sont tr s proches de lex et yacc commandes Unix bien connues qui existent dans la plupart des environnements de programmation C Ce chapitre suppose une connaissance certaine de lex et yacc bien qu il d crive la syntaxe d entr e de camllex et camlyacc et les principales diff rences avec lex et yacc il n explique pas comment crire une sp cification d analyseur pour lex ou yacc Les lecteurs qui ne sont pas familiers avec lex et yacc sont invit s se reporter Compilateurs principes techniques et outils de Aho Sethi et Ullman Inter ditions Compiler design in C de Holub Prentice Hall ou Lex amp Yacc de Levine Mason et Brown O Reilly Les flux et le filtrage de flux offrent un autre moyen d crire des analyseurs syntax iques et lexicaux La technique du filtrage de flux est plus puissante que la combinaison de camllex et camlyacc dans certains cas analyseurs syntaxiques d ordre sup rieur mais moins puissante dans d autres priorit s Choisissez l approche la mieux adapt e votre probl me d analyse particulier Mac Ces commandes sont des outils MPW et non pas des applications Macintosh ind pendantes 86 Ces commandes ne sont pas disponible
95. e est la valeur de expr et dont la queue est la valeur de exprs L expression expr 3 expr est quivalente expr expr et donc s value en la liste dont les l ments sont les valeurs de expr expr 1 7 15 Enregistrements L expression tiquette expr tiquette expr s value en Venregistrement tiquette v1 tiquette Un o v est la valeur de expr pour 1 n Les tiquettes tiquette tiquette doivent toutes appartenir au m me type enregistrement c est dire avoir t introduites dans une m me d finition de type enregistrement Toutes les tiquettes appartenant ce type enregistrement doivent appara tre exactement une fois dans l expression bien qu elles puissent ap para tre dans n importe quel ordre L ordre dans lequel les expressions expr expr sont valu es n est pas sp cifi Ex Supposons que a et b soient les deux tiquettes d un type enregistrement t1 et que l tiquette c appartienne un autre type enregistrement t2 L expression a 1 2 b true s value en l enregistrement a 3 b true L expression b true a 1 2 s value en le m me objet enregistrement L expression a 1 est incorrecte I tiquette b n est pas d finie L expression a 1 b true a 2 est incorrecte l tiquette a est d finie deux fois L expression a 1 b true c 0 est incorrecte l t
96. e le premier l ment du flux s et le retire du flux D clenche Parse_failure si le flux est vide value stream_from unit gt a gt a stream stream_from f renvoie le flux qui fabrique ses l ments en appelant la fonction f Cette fonction pourrait tre d finie par let rec stream_from f lt f stream_ from f gt mais est impl ment e plus efficacement en utilisant des op rations internes de bas niveau sur les flux value stream_of_string string gt char stream stream_of_string s renvoie le flux des caract res de la cha ne s value stream_of_ channel in_channel gt char stream stream_of_channel ic renvoie le flux des caract res lus sur le canal ic value do_stream a gt b gt a stream gt unit do_stream f s parcourt tout le flux s en appliquant tour tour la fonction f chaque l ment rencontr Le flux s est vid value stream_check a gt bool gt a stream gt a stream_check p renvoie l analyseur syntaxique qui retourne le premier l ment du flux si cet l ment v rifie le pr dicat p et d clenche Parse_failure sinon value end_of_stream a stream gt unit Renvoie si le flux est vide et d clenche Parse_failure sinon value stream_get a stream gt a a stream stream_get s renvoie le premier l ment du flux s et un flux contenant les autres l ments de s D clenche Parse_failure si le flux est vide Le flux
97. e le r pertoire donn la liste des r pertoires parcourus pour trouver les fichiers arguments zo Par d faut le r pertoire courant est parcouru le premier puis le r pertoire de la biblioth que standard Les r pertoires ajout s avec I sont parcourus apr s le r pertoire courant mais avant le r pertoire de la biblioth que standard Quand plusieurs r pertoires sont ajout s avec plusieurs options I sur la ligne de commande ces r pertoires sont parcourus de la droite vers la gauche le r pertoire le plus droite est parcouru le premier le plus gauche est parcouru le dernier o nom de biblioth que Sp cifie le nom du fichier produit Le nom par d faut est library zo 6 3 Transformer du code en une biblioth que Pour crire une biblioth que il est g n ralement plus facile de la couper en plusieurs modules qui refl tent la structure interne de la biblioth que Du point de vue des utilisateurs de la biblioth que en revanche il est pr f rable de voir la biblioth que comme un seul module avec seulement un fichier d interface fichier zi et un fichier d impl mentation fichier zo l dition de liens est simplifi e et il est inutile de mettre toute une s rie de directives open comme de se souvenir de la structure interne de la biblioth que La commande camllibr permet donc de n avoir qu un seul fichier zo pour toute la biblioth que Voici comment utiliser le syst me de module de Caml Light
98. e pr lude est copi au d but du fichier produit l pilogue la fin Typiquement le pr lude contient les di rectives open n cessaires aux actions et ventuellement quelques fonctions auxiliaires utilis es dans les actions l pilogue peut contenir un point d entr e dans le programme comme par exemple une boucle d interaction Tous les globaux d finis dans le pr lude et l pilogue restent locaux au module grammaire puisqu il n y a pas moyen de les d clarer dans l interface grammaire mli En particulier si les points d entr e calculent des valeurs de certains types concrets ces types ne peuvent pas tre d clar s dans le pr lude mais doivent tre d clar s dans un autre module que l on ouvre par open dans le pr lude de la grammaire 7 4 2 D clarations Chaque d claration occupe une ligne Elles commencent toutes par un caract re token symbole symbole D clare les symboles donn s comme lex mes symboles terminaux Ces symboles sont ajout s comme constructeurs constants au type somme token Atoken lt type gt symbole symbole D clare les symboles donn s comme lex mes munis d un attribut du type donn Ces symboles sont ajout s au type somme token comme des constructeurs avec un argument du type donn La partie type est une expression de type Caml Light ar bitraire ceci pr s que tous les constructeurs de type non pr d finis doivent avoir des noms compl tement qualifi s
99. e un modulo avec z ro La biblioth que de base 99 value minus int gt int value minus_int int gt int Oppos On peut crire e au lieu de minus e value succ int gt int succ x vaut x 1 value pred int gt int pred x vaut x 1 value prefix int gt int gt int value add_int int gt int gt int Addition value prefix int gt int gt int value sub_int int gt int gt int Soustraction value prefix int gt int gt int value mult_int int gt int gt int Multiplication value prefix int gt int gt int value div_int int gt int gt int value prefix quo int gt int gt int Division enti re D clenche Division_by_zero si le second argument est 0 R sultat non sp cifi si l un des arguments est n gatif value prefix mod int gt int gt int Reste D clenche Division_by_zero si le second argument est 0 R sultat non sp cifi si l un des arguments est n gatif value eq_int int gt int gt bool galit enti re quivalente l galit g n rique mais plus efficace value neq_int int gt int gt bool N gation d eq_int value prefix lt int gt int gt bool value lt_int int gt int gt bool value prefix gt int gt int gt bool value gt_int int gt int gt bool value prefix lt int gt int gt bool value le_int int gt int gt bool value prefix gt int gt in
100. ega_low 640 x 200 16 couleurs ega_high 640 x 350 16 couleurs yga_low 640 x 200 16 couleurs yga_med 640 x 350 16 couleurs vga_high 640 x 480 16 couleurs autre chose la r solution la plus fine possible La version PC 386 fonctionne avec les cartes graphiques VGA et la plupart des cartes SuperVGA pourvu que le pilote de graphique ad quat ait t install Voir les instructions d installation au chapitre 12 Seuls les modes 256 couleurs sont utilisables Cela implique une r solution de 320 x 200 sur VGA standard La biblioth que graphique 129 et de 640 x 480 1024 x 768 sur Super VGA L argument d open_graph est interpr t comme suit Argument Mode graphique highest la r solution la plus fine possible noninterlaced la r solution la plus fine possible sans entrelacement 320x200 mode 320 x 200 VGA standard wxh au moins w par h points si possible autre chose la r solution par d faut fix e par la variable G032 voir les instructions d installation 11 1 graphics primitives graphiques portables exception Graphic_failure of string D clench e par les fonctions de ce module quand elles rencontrent une erreur Initialisations value open_graph string gt unit Montre la fen tre graphique ou passe l cran en mode graphique La fen tre graphique est effac e La cha ne argument sert donner des informations option nelles sur le
101. el de r f rence du langage Caml Ex let prefix x y if x lt y then x else y in 1 2 s value en l entier 1 puisque dans l expression 1 2 l identificateur prefix est li la fonction minimum 1 8 D finitions de types et d exceptions Cette section d crit les constructions qui d finissent des types et des exceptions 1 8 1 D finitions de types d finition de type type def type and def type def type params ident def constr def constr params ident def tiquette def tiquette params ident exprtype params ident params rien gt ident ident ident def constr ident ident of exprtype def tiquette ident exprtype mutable ident exprtype Les d finitions de type lient les constructeurs de types des types de donn es des types sommes des types enregistrements des abr viations de types ou des types de donn es abstraits Les d finitions de type sont introduites par le mot cl type Elles consistent en une ou plusieurs d finitions simples ventuellement mutuellement r cursives s par es par le mot cl and Chaque d finition simple d finit un constructeur de type Une d finition simple consiste en un identificateur ventuellement pr c d d un ou de plusieurs param tres de type et suivi par la description d un type de donn es L identificateur est le nom local du constructeur de type en cours de d finition La parti
102. erpr teur de commandes command com fonctionnent aussi avec caml Quelques diteurs qui peuvent collaborer avec caml dosedit ced toddy Mais doskey de MS DOS 5 0 est inutilisable Avec la version 8086 la lecture la compilation ou l valuation de la phrase courante peuvent tre interrompues en appuyant sur ctrl break Ceci vous ram ne au signe d invite Appuyer sur ctr1 C interrompt l entr e mais n arr te pas une phrase qui ne fait pas d entr es sorties Le syst me interactif camllight 53 4 1 Avec la version 80386 appuyer sur ctrl C ou ctrl break interrompt le syst me tout moment pendant la lecture aussi bien que pendant la compilation ou l valuation Options Les options suivantes peuvent appara tre sur la ligne de commande de camllight ou caml 8 Lance le syst me interactif en mode de mise au point en anglais debugging Ce mode donne acc s aux valeurs et aux types locaux un module c est dire non export s dans l interface du module En mode normal ces objets locaux sont inaccessibles toute tentative pour y acc der provoque une erreur Variable non li e en mode de mise au point ces objets locaux deviennent visibles au m me titre que les objets export s dans l interface du module En particulier les valeurs de types abstraits sont affich es avec leur repr sentation et les fonctions locales un module peuvent tre trac es voir la fonction trace section 4 2
103. es de type L expression de type ident d note la variable de type nomm e ident Dans les d finitions de types de donn es les variables de type sont des noms pour les param tres du type de donn es Dans les contraintes de type elles repr sentent des types non sp cifi s qui peuvent tre remplac s par un type quelconque de mani re satisfaire la contrainte de type D finition du langage Caml 13 Types parenth s s L expression de type exprtype d note le m me type que exprtype Types fonctionnels L expression de type exprtype gt exprtype d note le type des fonctions qui font correspondre des r sultats de type exprtype des arguments de type exprtype Types produits L expression de type exprtype exprtype d note le type des n uplets dont les l ments appartiennent aux types exprtype exprtype respectivement Types construits Les constructeurs de type sans param tre comme constructeur de type sont des expressions de type L expression de type exprtype constructeur de type o constructeur de type est un constructeur de type avec un param tre d note l application du constructeur constructeur de type au type d not par exprtype L expression de type exprtype exprtype constructeur de type ot constructeur de type est un constructeur de type avec n param tres d note Vapplication du constructeur constructeur de type aux types exprtype exprtype Ex
104. es enregistrements qui d finissent au moins les champs tiquette tiquette et tels que le motif motif filtre la valeur associ e tiquette pour i 1 n La valeur enregistrement peut contenir d autres champs en plus de tiquette tiquette les valeurs associ es aux champs suppl mentaires sont ignor es par le m canisme de filtrage Ex Le motif a 1 b x filtre la valeur enregistrement associant 1 l tiquette a 2 abet 3 c et lie x 2 Plus g n ralement ce motif filtre tous les enregistrements associant 1 a et une certaine valeur b et lie x la valeur associ e b 18 1 7 Expressions expr filtrage liaison let op rateur pr fixe op rateur infixe Manuel de r f rence du langage Caml ident valeur globale constante expr begin expr end expr exprtype expr expr expr constructeur non constant expr expr expr expr expr expr expr tiquette expr tiquette expr expr expr op rateur pr fixe expr expr op rateur infixe expr expr tiquette expr tiquette lt expr expr expr expr expr lt expr expr amp expr expr or expr if expr then expr else expr while expr do expr done for ident expr to downto expr do expr done expr expr match expr with filtrage function filtrage fun motif gt expr try expr with filtrage let rec liaison let and liaison let in e
105. es modules de la biblioth que d utilitaires ne sont pas automatiquement ouverts au d but de chaque compilation et au lancement du syst me interactif Il est donc n cessaire d utiliser des identificateurs qualifi s pour faire r f rence aux fonctions fournies par ces modules ou d ajouter des directives open Conventions Pour faciliter la recherche les modules sont pr sent s par ordre alphab tique Pour chaque module les d clarations de son fichier d interface sont imprim es une par une en police machine crire suivie chacune par un court commentaire Tous les modules et les identificateurs qu ils exportent sont index s la fin de cet ouvrage 10 1 arg analyse des arguments de la ligne de commande Ce module fournit un m canisme g n ral pour extraire les options et arguments de la ligne de commande d un programme Syntaxe de la ligne de commandes Un mot cl est une cha ne de caract res qui commence avec un Une option est un mot cl seul ou suivi d un argument Il y a quatre genres de mots cl s Unit String Int et Float Les mots cl s du genre Unit ne prennent pas d argument Les mots cl s du genre String Int et Float prennent pour argument le mot suivant sur 116 La biblioth que standard du syst me Caml Light la ligne de commande Les arguments non pr c d s par un mot cl sont appel s arguments anonymes Exemples foo est suppos tre le nom de la commande foo flag
106. ession expr expr lt exprg est quivalente l application vect_assign expr expr expr3 Dans l environnement initial lidentificateur vect_assign est r solu en la fonction pr d finie qui modifie physiquement le tableau d not par expr rempla ant l l ment num ro expr par la valeur de expr3 L exception Invalid_argument est d clench e si l on tente d acc der hors des limites du tableau La fonction pr d finie retourne Donc Vexpression expr expr lt expr s value en la valeur rien Ce comportement de expr expr et de expr expr lt expr peut changer si la signification des identificateurs vect_item et vect_assign est modifi e soit par red finition soit par modification de la liste des modules ouverts Voir la discussion du paragraphe suivant 1 7 17 Op rateurs Les op rateurs not s op rateur infixe dans la grammaire des expressions peu vent apparaitre en position infixe entre deux expressions Les op rateurs not s op rateur pr fixe dans la grammaire peuvent apparaitre en position pr fixe devant une expression L expression op rateur pr fixe expr est interpr t e comme l application ident expr o ident est Videntificateur associ l op rateur op rateur pr fixe dans la table de la figure 1 1 De la m me fa on expr op rateur infixe expr est interpr t e comme Vapplication ident expr expr o ident est l identificateur associ l o
107. ex cutant de Caml Light comprend trois parties principales l interpr teur de code le gestionnaire m moire et un ensemble de fonctions C qui impl mentent les op rations primitives Des instructions de la machine abstraite permettent d appeler ces fonctions C d sign es par leur indice dans une table de fonctions la table des primitives Dans son mode par d faut l diteur de liens de Caml Light produit du code pour l ex cutant standard avec un ensemble standard de primitives Les r f rences des primitives qui ne sont pas dans cet ensemble standard conduisent a l erreur unavailable C primitive primitive C non disponible Dans le mode ex cutant d di l diteur de liens de Caml Light parcourt les fichiers de code fichiers zo et d termine l ensemble des primitives n cessaires Puis il construit un ex cutant ad quat par un appel a l diteur de liens de la machine avec e la table des primitives n cessaires e une biblioth que qui fournit l interpr teur de code le gestionnaire m moire et les primitives standard e les biblioth ques et fichiers de code objet fichiers o et a mentionn s sur la ligne de commande de l diteur de liens de Caml Light qui fournissent les impl mentations des primitives de l utilisateur On construit ainsi un ex cutant contenant toutes les primitives n cessaires L diteur de liens de Caml Light produit alors du code pour cet ex cutant d di Ce
108. exception n est jamais rattrap e par une construction try with C est l arr t imm diat du programme Si vous souhaitez conna tre l exception qui s chappe utilisez la fonction printexc__f de la bib lioth que standard et n oubliez pas de lier votre programme avec l option g Out of memory La m moire est pleine Le programme ex cut requiert plus de m moire que la m moire disponible Ou bien le programme construit des structures de donn es trop grosses ou bien il effectue trop d appels de fonctions imbriqu s et la pile d borde Dans certains cas votre programme est parfaitement correct il demande seulement plus de m moire que votre machine n en peut fournir Ce qui arrive fr quemment sur les petits micro ordinateurs mais rarement sur les machines Unix Dans d autres cas le message out of memory r v le une erreur dans votre programme une fonction L ex cutant camlrun 63 r cursive qui ne termine pas une allocation de chaine ou de tableau excessivement gros ou encore une tentative de construire une structure de donn es infinie Pour vous aider a diagnostiquer ce genre d erreur lancez votre programme avec l option v de camlrun Si vous voyez appara tre de nombreux messages Growing stack Extension de la pile c est probablement une fonction r cursive qui boucle Si les messages qui apparaissent sont de nombreux Growing heap Extension du tas et
109. ez fourni une impl mentation pour le module nomm mod mais elle arrive trop tard sur la ligne de commande l impl mentation de mod doit tre plac e avant tous les fichiers qui font r f rence une des variables globales qu il d finit Rem de changez l ordre des fichiers m1 et zo sur la ligne de commande Bien s r vous aurez toujours cette erreur si vous crivez des fonctions mutuelle ment r cursives r parties sur plusieurs modules Par exemple si la fonction modi__f appelle la fonction mod2__g et la fonction mod2__g appelle la fonction modi__f Dans ce cas quelle que soit la permutation des fichiers que vous puissiez faire sur la ligne de commande le programme sera rejet par l diteur de liens Rem des e Mettez f et g dans le m me module e Param trez une fonction par l autre Ainsi au lieu d crire modi ml let f x mod2__g mod2 ml let g y modi__f crivez mod1 ml let f g x S Le Bo chal RG mod2 ml let rec g y modi__f g et liez mod1 avant mod2 e Utilisez une r f rence qui contient l une des deux fonctions par exemple mod1 ml let ref_g ref fun x gt failwith ref_g lt type gt let f x lref_g mod2 ml let g y modi__f modi__ref_g g Unavailable C primitive f La primitive C f n est pas disponible 50 Manuel d utilisation du syst me Caml Light Cette erreur intervient quand vous essayez de
110. fonction initialize initialize amp Field v n Un La prochaine allocation peut d clencher un cycle de r cup ration m moire en anglais garbage collection Le r cup rateur de m moire suppose toujours que tous les blocs structur s contiennent des valeurs bien form es Lors de leur allocation les blocs nouvellement cr s contiennent des donn es al atoires qui g n ralement ne constituent pas des valeurs bien form es Si vous avez vraiment besoin d allouer avant que tous les champs puissent re cevoir leur valeur finale initialisez d abord avec une valeur constante par exemple Val_long 0 puis allouez et modifiez les champs avec les valeurs correctes voir r gle 3 R gle 2 Les variables locales contenant des valeurs doivent tre enregistr es aupr s du r cup rateur de m moire en utilisant les macros Push_roots et Pop_roots si elles doivent survivre un appel une fonction d allocation L enregistrement se fait par les macros Push_roots et Pop_roots L appel Push_roots r n d clare un tableau r de n valeurs et les enregistre aupr s du r cup rateur de m moire Les valeurs contenues dans r 0 r n 1 sont trait es comme des racines par le r cup rateur de m moire Une valeur racine a les propri t s suivantes si elle pointe vers un bloc allou dans le tas ce bloc et son contenu ne seront pas r cup r s de plus si ce bloc est d plac par le r cup rateur de Communication entre C
111. format ou si trop d arguments sont fournis En revanche si pas assez d arguments sont fournis l impression s arr te juste avant de convertir le premier argument manquant Cette fonction n est pas s re puisqu elle renvoie un objet de type a qui peut tre mal utilis ensuite Il est recommand de toujours utiliser fprintf l int rieur d une s quence comme dans fprintf d n O value printf string gt a Analogue fprintf mais sort sur std_out value fprint out_channel gt string gt unit Imprime la cha ne donn e sur le canal de sortie donn sans aucun formatage C est la m me fonction que output_string du module io value print string gt unit Imprime la cha ne donn e sur std_out sans aucun formatage C est la m me fonction que print_string du module io 10 9 queue files d attente Ce module impl mente les files d attente qui suivent la strat gie premier entr premier sorti avec modification en place Ces files sont aussi appel es FIFO pour first in first out type at Le type des files contenant des l ments de type a exception Empty D clench e quand take est appliqu e une file vide value new unit gt a t Renvoie une nouvelle file initialement vide value add a gt a t gt unit add x q ajoute l ment x la fin de la file q La biblioth que d utilitaires 123 value take a t gt a take q supprime et renvoie le p
112. fset length Quand la fonction primitive est appliqu e dans un programme Caml Light la fonc tion C est appel e avec les valeurs des expressions auxquelles la primitive est appliqu e La valeur retourn e par la fonction est repass e au programme Caml Light en r sultat de l application de la fonction Les primitives de l utilisateur ayant six arguments ou plus sont impl ment es par des fonctions C qui re oivent deux arguments un pointeur vers un tableau de valeurs Caml Light les valeurs des arguments et un entier qui est le nombre d arguments fournis la primitive value prim_avec_7_arguments argv argn value argv int argn argv O Le premier argument argv 6 Le septi me argument L impl mentation d une primitive utilisateur comprend en fait deux parties dis tinctes un travail d encodage d codage d une part puisqu a l appel il faut d coder les arguments Caml Light pour en extraire des valeurs C tandis qu au retour il faut en coder la valeur C r sultat en une valeur Caml Light et d autre part le calcul du r sultat escompt partir des arguments traduits en valeurs C Sauf pour les primitives tr s simples il vaut mieux crire deux fonctions C distinctes pour r aliser ces deux t ches distinctes L une des fonctions impl mente proprement parler la primitive travaillant compl tement en C donc ayant des valeurs C en arguments et r sultat La sec
113. g list gt int gt string gt out_channel open_out_gen mode droits nom ouvre le fichier de nom nom en criture L argument mode sp cifie le mode d ouverture voir sys__open L argument droits sp cifie les permissions attribu es au fichier au cas o il est n cessaire de le cr er voir sys__open open_out et open_out_bin sont des cas particuliers de cette fonction value open_descriptor_out int gt out_channel open_descriptor_out df renvoie un canal de sortie qui crit sur le descripteur de fichier df Le descripteur de fichier df doit avoir t pr alablement ouvert en criture d faut le comportement de cette fonction n est pas sp cifi value flush out_channel gt unit Vide le tampon associ au canal de sortie donn en achevant toutes les critures en instance sur ce canal Les programmes interactifs doivent prendre soin de vider std_out aux bons moments value output_char out_channel gt char gt unit crit un caract re sur le canal de sortie donn value output_string out_channel gt string gt unit crit une cha ne sur le canal de sortie donn value output out_channel gt string gt int gt int gt unit output can tamp index longueur crit longueur caract res de la cha ne tamp partir de la position index sur le canal de sortie can D clenche Invalid_argument output si index et longueur ne d signent pas une sous cha ne valide de tamp value outpu
114. ga Le syst me Caml Light est distribu gratuitement et peut tre reproduit librement des fins non commerciales On peut l obtenir par l interm diaire du r seau Internet en faisant FTP sur la machine ftp inria fr dans le r pertoire lang caml light L Institut National de Recherche en Informatique et en Automatique INRIA en as sure galement la distribution sur disquettes pour les micro ordinateurs Macintosh et compatibles PC Pour obtenir une disquette pour l une ou l autre de ces machines reportez vous l encadr qui figure en page de copyright Conventions Le syst me Caml Light se pr sente sous diff rentes versions pour machine Unix pour Macintosh et pour PC Certaines parties de ce livre sont sp cifiques une version particuli re du syst me Caml Light Ces parties sont pr sent es ainsi Unix Mac 86 386 PC Ceci concerne uniquement la version Unix Ceci concerne uniquement la version Macintosh Ceci concerne uniquement la version PC 8086 et 80286 Ceci concerne uniquement la version PC 80386 Ceci concerne uniquement les deux versions PC I Manuel de r f rence du langage Caml 1 D finition du langage Caml Introduction Ce chapitre constitue le manuel de r f rence du langage Caml On y passe en revue toutes les constructions du langage et on y d crit leur syntaxe et leur s mantique Ce n est absolument pas une introduction au langage Caml mais un texte de r f re
115. gt bool N gation d eq_float value prefix lt float gt float gt bool value prefix lt float gt float gt bool value 1lt_float float gt float gt bool value prefix gt float gt float gt bool value prefix gt float gt float gt bool value gt_float float gt float gt bool value prefix lt float gt float gt bool value prefix lt float gt float gt bool value le_float float gt float gt bool value prefix gt float gt float gt bool value prefix gt float gt float gt bool value ge_float float gt float gt bool Comparaisons entre flottants value exp float gt float value log float gt float value sqrt float gt float value power float gt float gt float value sin float gt float value cos float gt float value tan float gt float 98 La biblioth que standard du syst me Caml Light value asin float gt float value acos float gt float value atan float gt float value atan2 float gt float gt float Fonctions transcendantes bien connues sur les flottants value abs_float float gt float Renvoie la valeur absolue de son argument value string_of_float float gt string Convertit un flottant en sa repr sentation d cimale value float_of_string string gt float 9 8 9 9 Convertit une chaine repr sentant un flottant en d cimal en un flottant Le
116. hapitre 4 ce fichier zix permet d acc der aux valeurs locales d un module partir du syst me interactif pour les essayer et les mettre au point Le fichier zix n est pas produit si l impl mentation n a pas d interface explicite puisque dans ce cas le module n a pas de valeurs locales Force le compilateur imprimer les types les exceptions et les variables globales d clar s lors de la compilation d une impl mentation fichier m1 Ce peut tre utile pour examiner les types trouv s par le compilateur De plus comme la sortie du compilateur ob it exactement la syntaxe des interfaces de module cette option aide l criture de l interface explicite fichier mli d un module il suffit de rediriger la sortie standard du compilateur vers un fichier mli puis d diter ce fichier pour supprimer toutes les d clarations des globaux du module qu on ne d sire pas exporter 46 Manuel d utilisation du syst me Caml Light I r pertoire Ajoute le r pertoire donn la liste des r pertoires parcourus pour trouver les fichiers d interface compil e des modules zi et les fichiers de code compil zo Par d faut le r pertoire courant est parcouru le premier puis le r pertoire de la biblioth que standard Les r pertoires ajout s avec I sont parcourus apr s le r pertoire courant mais avant le r pertoire de la biblioth que standard Quand plusieurs r pertoires sont ajout s avec plusieurs
117. i dans le code engendr par camllex est li au tampon pass la fonction d analyse syntaxique value get_lexeme lexbuf gt string get_lexeme lexbuf renvoie la chaine filtr e par l expression rationnelle value get_lexeme_char lexbuf gt int gt char get_lexeme_char lexbuf i renvoie le caract re num ro i de la chaine filtr e value get_lexeme_start lexbuf gt int get_lexeme_start lexbuf renvoie la position dans le tampon d entr e du pre mier caract re de la cha ne filtr e Le premier caract re lu a la position 0 value get_lexeme_end lexbuf gt int get_lexeme_start lexbuf renvoie la position dans le tampon d entr e du car act re suivant le dernier caract re de la cha ne filtr e Le premier caract re lu a la position 0 10 6 parsing la bibliotheque d ex cution des analyseurs syntaxiques engendr s par camlyacc value symbol_start unit gt int value symbol_end unit gt int La biblioth que d utilitaires 121 Appel es depuis la partie action d une r gle de grammaire ces fonctions renvoient la position de la cha ne qui filtre le membre gauche de la r gle symbol_start renvoie la position du premier caract re symbol_end renvoie la position du dernier caract re plus un Le premier caract re lu a la position 0 value rhs_start int gt int value rhs_end int gt int Ces fonctions sont analogues symbol_start et symbol_end mais renvoient la position
118. i convient Puis ex cutez les commandes suivantes CD C CAML86 A PKUNZIP d A CL5PC86 A PKUNZIP d A CL5EXPLE Prenez soin de bien choisir l option d de pkunzip Cette commande extrait tous les fichiers du r pertoire C CAML86 Ensuite ditez le fichier de d marrage C AUTOEXEC BAT pour e ajouter C CAML86 BIN la variable PATH c est dire transformer la ligne SET PATH C DOS en SET PATH C DOS C CAML86 BIN e ins rer la ligne suivante SET CAMLLIB C CAML86 LIB Puis sauvegardez le fichier autoexec bat et red marrez la machine Pour tester Vinstallation ex cutez camlc v La commande camlc devrait imprimer quelque chose du genre 140 Annexes The Caml Light system for the 8086 PC version 0 6 standard library from C CAML86 LIB The Caml Light runtime system version 0 6 The Caml Light compiler version 0 6 The Caml Light linker version 0 6 Ex cutez ensuite caml La commande caml devrait afficher gt Caml Light version 0 6 En r ponse au signe d invite tapez quit Cela devrait vous renvoyer l interpr teur de commandes DOS Probl mes Voici quelques probl mes fr quemment rencontr s Cannot find the bytecode file Fichier de code introuvable camirun exe No such file Le fichier camlrun exe n existe pas L installation n a pas t faite correctement V rifiez le fichier AUTOEXEC BAT et la d finition des variables PATH et CAMLLIB N oubliez pas qu
119. ib mli tels que le type option Bien s r ces modules ne doivent pas faire r f rence aux types abstraits ni aux fonctions publiques pour viter les circularit s Les types tels que windows__win dans l exemple pr c dent peuvent tre export s par le module windows soit abstraitement soit concr tement avec leurs d finitions Souvent il est n cessaire de les exporter concr tement parce que les autres modules de la biblioth que images buttons ont besoin de construire ou de d structurer directe ment des valeurs de ces types M me si windows__win est export concr tement par le module windows ce type restera abstrait l utilisateur de la biblioth que puisqu il est abstrait par l interface publique de mylib La construction de la biblioth que mylib se d roule comme suit camlc c mylib mli cr e mylib zi camlc c windows mli windows ml images mli images ml camlc c buttons mli buttons ml camlc c mylib ml cr e mylib zo mv mylib zo tmplib zo renommage pour viter de d truire mylib zo camllibr o mylib zo windows zo images zo buttons zo tmplib zo Puis on copie mylib zi et mylib zo en un endroit accessible aux utilisateurs de la biblioth que Les autres fichiers zi et zo n ont pas besoin d tre copi s 7 G n rateurs d analyseurs syntaxiques et lexicaux camllex camlyacc Ce chapitre d crit deux g n rateurs de programmes camllex qui produit un anal yseur lexical partir d un ensembl
120. ight Dans la suite nous supposerons que ce r pertoire est C CAML386 Si vous choi sissez un r pertoire diff rent remplacez C CAML386 par le chemin absolu appropri Puis ex cutez les commandes suivantes Instructions d installation 141 CD C CAML386 A PKUNZIP d A CL5PC386 A PKUNZIP d A CL5EXPLE Prenez soin de bien choisir option d de pkunzip Cette commande extrait tous les fichiers du r pertoire C CAML386 S lectionnez ou cr ez un r pertoire o Caml Light pourra mettre ses fichiers tempo raires Beaucoup de machines ont d j un r pertoire C TMP pour cet usage S il n existe pas cr ez le Pour la suite de la proc dure de configuration vous devez d terminer deux choses e Votre machine poss de t elle une arithm tique flottante c bl e c est dire un coprocesseur 387 un processeur 486DX ou un coprocesseur 487SX Si vous ne savez pas faites comme si vous n aviez pas d arithm tique flottante c bl e Quel type de carte SuperVGA avez vous Les primitives graphiques de Caml Light fonctionnent avec n importe quelle carte VGA en mode 320 x 200 points 256 couleurs mais Caml Light sait aussi profiter des possibilit s suppl mentaires de nombreuses cartes SuperVGA et travailler avec une meilleure r solution Pour ce faire vous devez d terminer quel contr leur graphique est utilis dans votre carte SuperVGA Relisez la documentation fournie avec la carte puis exam inez les fichiers
121. il faut red marrer la machine pour que les modifications apport es AUTOEXEC BAT prennent effet Out of memory La m moire est pleine Caml Light tient tout juste dans l espace m moire ridiculement petit fourni par MS DOS Vous devez donc vous assurer qu un maximum des fatidiques 640K sont libres avant de lancer Caml Light 500K de m moire libre constituent le minimum absolu 600K sont encore peine suffisants Pour lib rer de la m moire supprimez le plus possible de pilotes de p riph riques en anglais device drivers et de programmes r sidents TSR pour terminate and stay resident Pour ce faire supprimez dans le fichier CONFIG SYS les lignes qui chargent les pilotes de p riph riques et dans le fichier AUTOEXEC BAT les lignes qui chargent les programmes r sidents Red marrez ensuite la machine Une autre solution consiste essayer de charger vos pilotes et TSR en dehors de la zone m moire standard de 640K en utilisant des gestionnaires de m moire tels que QEMM ou EMM386 en MS DOS 5 Pour plus de d tails consultez l abondante litt rature sur MS DOS 12 3 2 La version PC 80386 Mat riel n cessaire Un PC avec processeur 80386 ou 80486 tournant sous MS DOS version 3 3 ou post rieure 2M de RAM Environ 1 2M de m moire libre sur le disque dur Les primitives graphiques n cessitent une carte vid o VGA ou SuperVGA Installation Cr ez un r pertoire sur le disque dur o vous mettrez le syst me Caml L
122. ils de compilation ind pendante de la fa on suivante les outils et scripts du dossier tools doivent r sider dans un endroit tel que MPW puisse les trouver et les reconna tre comme des commandes Il y a deux fa ons d obtenir ce r sultat vous pouvez soit copier les fichiers du dossier tools dans le dossier Tools ou Scripts de votre dossier MPW soit laisser les fichiers dans le dossier tools et ajouter la ligne suivante au fichier UserStartup en supposant que Caml Light r side dans le dossier Caml Light du disque dur My HD Set Commands Commands My HD Caml Light tools Dans les deux cas vous devez maintenant diter le script camlc et remplacer la chaine de caract res Macintosh HD Caml Light 1ib sur la premi re ligne par le chemin d acc s r el au dossier 1ib Par exemple si Caml Light r side dans le dossier Caml Light du disque dur My HD la premi re ligne de camlc doit tre Set stdlib My HD Caml Light lib Probl mes Voici le probl me le plus couramment rencontr Cannot find file stream zi Fichier stream zi introuvable Affich dans la fen tre Caml Light output avec une bo te d alerte qui vous signale que le programme Caml Light s est termin de fa on anormale C est le sympt me d une mauvaise installation Le dossier nomm lib dans la distribution doit toujours tre dans le m me dossier que l application Caml Light On peut bien str d placer l application mais pensez d
123. ions de flux servent construire des flux tandis que les motifs de flux servent acc der au contenu des flux Les flux et motifs de flux sont particuli rement bien adapt s l criture des analyseurs syntaxiques descente r cursive Les expressions de flux sont introduites par une extension de la classe syntaxique des expressions expr es lt gt k composant de flux composant de flux gt function filtrage de flux match expr with filtrage de flux filtrage de flux motif de flux gt expr motif de flux gt expr composant de flux expr expr Les expressions de flux sont parenth s es par lt et gt Elles repr sentent la con cat nation de leurs composants Le composant expr repr sente le flux un seul l ment la valeur de expr Le composant expr repr sente un sous flux Le flux vide est d not par lt gt Ex Si s et t sont des flux d entiers alors lt 1 s t 2 gt est un flux d entiers contenant l l ment 1 puis les l ments de s puis ceux de t et finalement 2 36 Manuel de r f rence du langage Caml Au contraire de toutes les autres expressions du langage les expressions de flux sont soumises l valuation paresseuse en anglais lazy evaluation les composants d un flux ne sont pas valu s la construction du flux mais seulement quand on acc de ces composants pendant le filtrage de flux Les composants sont valu s une
124. ions lexicales fixes pour ce qui est des identificateurs des litt raux des commentaires etc mais l ensemble des mots cl s r serv s est param trable Les conventions lexicales utilis es sont proches de celles du langage Caml type token Kwd of string Ident of string Int of int Float of float String of string Char of char Le type des lex mes Les classes lexicales sont Int et Float pour les entiers litt raux et les d cimaux litt raux String pour les cha nes de caract res litt rales entre guillemets Char pour les caract res litt raux entre apostrophes in verses Ident pour les identificateurs Kwd pour les mots cl s Les iden tificateurs sont de deux sortes ou bien une suite de lettres chiffres et car act res soulign s ou bien une suite de caract res op rateurs comme et Les mots cl s sont ou bien des identificateurs ou bien des caract res sp ciaux comme et value make_lexer string list gt char stream gt token stream Construit la fonction d analyse lexicale tant donn la liste des mots cl s Lorsque Vanalyseur lit un identificateur id il renvoie Kwd id si id appartient la liste des mots cl s et Ident id sinon Lorsque l analyseur lit un caract re sp cial c ni lettre ni chiffre ni op rateur il renvoie Kwd c si ce caract re appartient la liste des mots cl s et d clenche une erreur exception Parse_error sinon 118 La bibl
125. ioth que standard du syst me Caml Light L analyseur ignore les blancs espaces retours chariot etc et les commentaires d limit s par et Les blancs s parent les lex mes adjacents Les commen taires peuvent tre emboit s Exemple un analyseur lexical adapt une calculatrice quatre op rations s obtient par let lexer make lexer Mensonge nn ep wom ny D L analyseur syntaxique associ se pr sente sous la forme d une fonction du type token stream vers le type int par exemple et se pr sente typiquement sous la forme let parse_expr function lt Int n gt gt n lt Kwd parse_expr n Kwd gt gt n lt parse_expr n1 parse_end n1 n2 gt gt n2 and parse_end ni function lt Kwd parse_expr n2 gt gt ni n2 lt Kwd parse_expr n2 gt gt ni n2 10 4 hashtbl tables de hachage Les tables de hachage sont des tables d association par hachage avec modification physique type Ca b t Le type des tables associant des l ments du type b des cl s de type a value new int gt a b t new n cr e une nouvelle table de hachage initialement vide de taille n La table grossit si n cessaire donc la valeur de n n est qu indicative Prendre un nombre premier pour n rend le hachage plus efficace value clear a b t gt unit Vide une table de hachage value add a b t gt a
126. iquette c n appartient pas au m me type enregistrement que les deux autres L expression expr tiquette value expr en une valeur enregistrement et retourne la valeur associ e tiquette dans cette valeur enregistrement L expression expr tiquette lt expr value expr en une valeur enregistrement qui est alors modifi e physiquement en rempla ant la valeur associ e tiquette dans cet enregistrement par la valeur de expr Cette op ration n est autoris e que si tiquette a t d clar mutable dans la d finition du type enregistrement L expression expr tiquette lt expr s value en la valeur rien 26 Manuel de r f rence du langage Caml 1 7 16 Tableaux L expression expr expr s value en un tableau n cases dont les l ments sont initialis s avec les valeurs de expr expr respectivement L ordre dans lequel ces expressions sont valu es n est pas sp cifi L expression expr expry est quivalente l application vect_item expr expr Dans l environnement initial l identificateur vect_item est r solu en la fonc tion pr d finie qui retourne la valeur de l l ment num ro expr dans le tableau d not par expr Le premier l ment porte le num ro 0 et le dernier l ment le num ro n 1 o n est la taille du tableau L exception Invalid_argument est d clench e si l on tente d acc der hors des limites du tableau L expr
127. l ext rieur du tas peut sans probl mes tre converti par un cast vers le type value et r ciproquement Cela inclut les pointeurs retourn s par malloc et les pointeurs vers des variables C obtenus par l op rateur amp 8 3 Repr sentation des types de donn es Caml Light Cette section d crit le codage des types de donn es Caml Light dans le type value 8 3 1 Types atomiques int Valeurs entieres non allou es char Valeurs enti res non allou es code ASCII float Blocs avec marqueur Double_tag string Blocs avec marqueur String_tag 8 3 2 Types produits Les n uplets et les tableaux sont repr sent s par des pointeurs vers des blocs avec marqueur 0 Les enregistrements sont aussi repr sent s par des blocs marqu s z ro L ordre de d finition des tiquettes de l enregistrement lors de la d finition du type d termine Vindice des champs de l enregistrement la valeur associ e l tiquette d clar e en premier est enregistr e dans le champ 0 du bloc la valeur associ e l tiquette d clar e en second va dans le champ 1 et ainsi de suite 8 3 3 Types somme Les valeurs d un type somme sont repr sent s par des blocs dont le marqueur code le constructeur Les constructeurs d un type somme donn sont num rot s partir de z ro jusqu au nombre de constructeurs moins un suivant l ordre de leur apparition dans la d finition du type somme Les constructeurs constants sont repr sent s pa
128. l let g x 1 modi__f x mod3 ml mod2__g modi__A Maintenant supposons que mod1 ml est modifi et recompil mais que mod2 ml n est pas recompil La recompilation de modi ml peut changer la marque at tribu e au type t Mais l interface mod2 zi utilisera encore l ancienne marque pour mod1__t dans le type de mod2__g Donc en compilant mod3 m1 le syst me Compilation ind pendante camlc 49 va se plaindre que le type de l argument de mod2__g c est dire mod1__t avec l ancienne marque n est pas compatible avec le type de mod1__A c est dire modi__t avec la nouvelle marque Rem de utilisez make ou un outil similaire pour tre certain que tous les clients d un module mod sont recompil s quand Vinterface mod zi change Pour v rifier que le Makefile contient les bonnes d pendances supprimez tous les fichiers zi et reconstruisez tout le programme si aucune erreur Cannot find file ne se produit tout va bien mod__nom is referenced before being defined mod__nom est mentionn avant d avoir t d fini Cette erreur apparait quand vous essayez de lier un ensemble de fichiers qui est incomplet ou mal ordonn Vous avez par exemple oubli de fournir une impl mentation pour le module nomm mod sur la ligne de commande typ iquement le fichier nomm mod zo ou une biblioth que contenant ce fichier Rem de ajoutez le fichier ml ou zo qui manque sur la ligne de commande Ou alors vous av
129. lacer par le nom du pilote graphique pour votre carte Super VGA d termin ci dessus Comme nous l avons d j vu plus haut vous pouvez choisir une autre r solution graphique par d faut en modifiant les nombres 640 et 480 Si vous n avez pas pu d terminer le bon pilote graphique mettez seulement SET G032 emu C CAML386 DEV EMU387 Puis sauvegardez le fichier AUTOEXEC BAT et red marrez la machine Pour tester Vinstallation ex cutez camlc v La commande camlc devrait imprimer quelque chose de la forme The Caml Light system for the 80386 PC version 0 6 standard library from C CAML386 LIB The Caml Light runtime system version 0 6 The Caml Light compiler version 0 6 The Caml Light linker version 0 6 Ex cutez ensuite caml La commande caml devrait afficher gt Caml Light version 0 6 En r ponse au signe d invite tapez quitQ Cela devrait vous renvoyer l interpr teur de commandes DOS Probl mes Voici quelques probl mes fr quemment rencontr s Cannot find the bytecode file Fichier de code introuvable camlrun exe No such file Le fichier camlrun exe n existe pas L installation n a pas t faite correctement V rifiez le fichier AUTOEXEC BAT et la d finition des variables PATH et CAMLLIB N oubliez pas qu il faut red marrer la machine pour que les modifications apport es AUTOEXEC BAT prennent effet CPU must be a 386 to run this program L unit centrale doit
130. le code de foo zo bar zo et gee zo est d j charg en m moire comme si vous aviez tap load_object foo load_object bar load_object gee l entr e de la session Les modules foo bar et gee ne sont cependant pas ouverts vous devez encore taper vous m me open foo si c est ce que vous d sirez 4 6 Options Les options suivantes peuvent appara tre sur la ligne de commande de camlmktop custom dition de liens en mode ex cutant d di Voir l option correspondante de camlc dans le chapitre 3 I r pertoire Ajoute le r pertoire donn la liste des r pertoires parcourus pour trouver les fichiers de code compil zo o nom du fichier ex cutable Sp cifie le nom du fichier produit par l diteur de liens Le nom par d faut est camltop out D L ex cutant camlrun La commande camlrun ex cute les fichiers de code produits par la phase d dition de lien de la commande camlc Mac Cette commande est un outil MPW et non pas une application Macintosh ind pendante 5 1 Vue d ensemble La commande camlrun comprend trois parties principales l interpr teur de code de la machine virtuelle de Caml Light qui ex cute effectivement les fichiers de code Vallocateur de m moire et le r cup rateur de m moire en anglais garbage collector et enfin un ensemble de fonctions C qui impl mentent les op rations primitives telles que les entr es sorties L appel de
131. leur s effectue par la construc tion ident lt expr o ident est un identificateur li par filtrage de motif l argument d un constructeur modifiable et expr d note la valeur qui doit remplacer cet argument En continuant l exemple pr c dent let x 1 in begin match x with A y gt y lt 2 __ gt end x renvoie la valeur A 2 La notation ident lt expr est galement accept e si ident est un identificateur li par filtrage la valeur d un champ modifiable d enregistrement Par exemple type bar mutable 1bl int let x 1bl 1 in begin match x with lbl y gt y lt 2 end x renvoie la valeur 1b1 2 2 5 Directives En plus des directives standard open et close Caml Light fournit trois directives suppl mentaires infix id Modifie le statut lexical de l identificateur id dans la suite de l unit de compila tion id sera reconnu comme un op rateur infixe au m me titre que par exemple La notation prefix id permet de faire r f rence l identificateur id lui m me Les expressions de la forme expr id expr sont analys es comme l application prefix id expr exprs L argument de la directive infix doit tre un identifica teur c est dire une suite de lettres chiffres et soulign s qui commence par une lettre sinon la d claration infix n a pas d effet Exemple infix union let prefix union fun x y gt 1 2 union 3 4
132. lioth que 7 G n rateurs d analyseurs syntaxiques et lexicaux camllex camlyacc 7 1 7 2 7 3 7 4 7 5 7 6 Vue d ensemble de camllex Syntaxe des d finitions d analyseurs lexicaux Vue d ensemble de camlyacc Syntaxe des d finitions de grammaires Options Un exemple complet 8 Communication entre Caml Light et C 8 1 8 2 8 3 8 4 8 9 8 6 Vue d ensemble Le type value Repr sentation des types de donn es Caml Light Op rations sur les valeurs Vivre en harmonie avec le r cup rateur de m moire Un exemple complet III La biblioth que standard du syst me Caml Light 9 La biblioth que de base 9 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 9 10 9 11 9 12 9 13 9 14 9 15 9 16 9 17 bool op rations sur les bool ns builtin types et constructeurs de base char op rations sur les caract res eq fonctions d galit exc exceptions fchar op rations sur les caract res sans v rifications float op rations sur les nombres flottants fstring op rations sur les cha nes de caract res sans v rifications fvect op rations sur les tableaux sans v rifications int op rations sur les entiers io entr es sorties avec tampons list op rations sur les listes pair op rations sur les paires ref op rations sur les r f rences stream op rations sur les flux string op rations sur les cha nes de caract res vect op rations sur les tableaux 59 61 61 62 62 65 65
133. lles sont export es L impl mentation du module doit d finir ces valeurs avec des types au moins aussi g n raux que les types d clar s dans l interface La port e des liaisons de ces valeurs globales s tend de l impl mentation du module lui m me tous les modules qui font r f rence ces valeurs Ex La phrase d interface value f int gt int indique que l impl mentation d finit une valeur globale f de type int gt int et rend cette valeur accessible aux autres modules Les d clarations de type ou d exception introduisent des constructeurs de types des constructeurs de valeurs et des tiquettes d enregistrements comme expliqu dans les sections 1 8 1 et 1 8 2 Les d clarations d exception et de type qui ne sont pas abstraits prennent effet dans l impl mentation du module c est dire que les constructeur de types les constructeurs de sommes et les tiquettes d enregistrements qu ils d finissent sont consid r s comme d finis au d but de l impl mentation du module et les phrases d impl mentation peuvent y faire r f rence Les d clarations de type qui ne sont pas abstraits ne doivent pas tre red finies dans l impl mentation du module Au con traire les constructeurs de types qui ont t d clar s abstraits doivent tre d finis dans l impl mentation du module avec les m mes noms Ex La phrase d interface type nombre Entier of int Flottant of float d finit un type s
134. ls Les r f rences qui suivent int resseront ceux qui veulent savoir comment le langage ML se compile et s impl mente e Xavier Leroy The ZINC experiment an economical implementation of the ML language Rapport technique 117 INRIA 1990 Disponible par FTP anonyme sur ftp inria fr Une description de ZINC le prototype d impl mentation de ML qui a volu en Caml Light De grandes parties de ce rapport s appliquent encore au syst me Caml Light en particulier la description du mod le d ex cution et de la machine abstraite D autres parties sont d pass es Malgr tout ce rapport donne encore une bonne id e des techniques d impl mentation utilis es pour Caml Light e Simon Peyton Jones The implementation of functional programming languages Prentice Hall 1987 Traduction frangaise Mise en uvre des langages fonction nels de programmation Masson 1990 Une excellente description de l impl mentation des langages purement fonction nels s mantique paresseuse l aide de la technique de r duction de graphe La partie du livre qui traite des transformations de ML en lambda calcul enrichi s applique directement Caml Light Vous y trouverez une bonne description de la compilation du filtrage et de l inf rence de types e Andrew W Appel Compiling with continuations Cambridge University Press 1992 Une description compl te d un compilateur optimisant pour Standard ML re posant sur une
135. ls ob issent donc des contraintes de structure tr s strictes Chaque bloc comprend un en t te contenant la taille du bloc en mots et un marqueur Le marqueur indique comment est structur le contenu du bloc Un marqueur plus petit que No_scan_tag d signe un bloc structur contenant des valeurs bien form es qui est r cursivement examin par le r cup rateur de m moire Un mar queur sup rieur ou gal No_scan_tag indique un bloc brut dont le contenu n est pas examin par le r cup rateur de m moire Pour autoriser l impl mentation de primitives polymorphes ad hoc telles que l galit ou les entr es sorties de valeurs structur es les blocs sont en outre class s selon leur marqueur Marqueur Contenu du bloc 0 No_scan_tag 1 Un bloc structur un tableau d objets Caml Light Chaque champ est un objet de type value Closure_tag Une fermeture en anglais closure qui repr sente une valeur fonctionnelle Le premier mot est un pointeur vers un morceau de code le second est une value contenant l environnement String_tag Une cha ne de caract res Double_tag Un flottant en double pr cision Abstract_tag Un bloc d un type de donn es abstrait Final _tag Un bloc pour un type de donn es abstrait avec une fonction de finalisation qui est appel e quand le bloc est lib r Communication entre Caml Light et C 83 8 2 3 Pointeurs en dehors du tas Tout pointeur vers
136. lure hd si la liste est vide value tl a list gt a list Renvoie la liste donn e sans son premier l ment D clenche Failure t1 si la liste est vide value rev a list gt a list Renverse une liste value map a gt b gt a list gt b list map f al an applique tour tour la fonction f al an et construit la liste f a1 f an des r sultats retourn s par f value do_list a gt b gt a list gt unit do_list f ai an applique tour tour la fonction f ai an ignorant tous les r sultats Equivaut begin f al f a2 f an end value it_list a gt b gt a gt a gt b list gt a it_list f a bi bn vaut f f f a b1 b2 bn value list_it Ca gt b gt b gt a list gt b gt b list_it f al an b vaut f ai f a2 f an b La biblioth que de base 107 value map2 a gt b gt c gt a list gt b list gt c list map2 f ai an b1 bn vaut f ai b1 f an bn D clenche Invalid_argument map2 si les deux listes n ont pas la m me longueur value do_list2 a gt b gt c gt a list gt b list gt unit do_list2 f al an b1 bn applique tour tour f ai bi f an bn ignorant tous les r sultats D clenche Invalid_argument do_list2 si les deux listes
137. ment naturel de ce manuel Une initiation progressive la program mation en Caml On y pr sente de nombreux exemples de programmes Caml r alistes Lawrence C Paulson ML for the working programmer Cambridge University Press 1991 Une bonne introduction la programmation en Standard ML avec plusieurs ex emples complets dont un d monstrateur de th or mes Pr sente galement le syst me de modules de Standard ML Chris Reade Elements of functional programming Addison Wesley 1989 Une introduction a Standard ML avec des parties sur la s mantique d notationnelle et le lambda calcul Ryan Stansifer ML primer Prentice Hall 1992 Une introduction br ve mais bien faite 4 la programmation en Standard ML Th r se Accart Hardin et V ronique Donzeau Gouge Vigui Concepts et outils de la programmation Du fonctionnel a Vimp ratif avec Caml et Ada InterEditions 1992 Un premier cours de programmation qui introduit certaines notions de program mation d abord en Caml puis en Ada S adresse aux d butants un peu lent pour les autres Ake Wikstrom Functional programming using Standard ML Prentice Hall 1987 146 Annexes Un premier cours de programmation enseign en Standard ML l intention des tout d butants lent pour les autres Harold Abelson et Gerald Jay Sussman Structure and interpretation of computer programs The MIT Press 1985 Traduction fran aise Structure et interpr tation
138. mode graphique d sir la taille de la fen tre graphique etc Son interpr tation d pend de l impl mentation Si la cha ne fournie est vide un mode par d faut raisonnable est utilis value close_graph unit gt unit Supprime la fen tre graphique ou remet l cran en mode texte value clear_graph unit gt unit Efface la fen tre graphique value size_x unit gt int value size_y unit gt int Renvoie la taille de la fen tre graphique Les coordonn es des points de l cran vont de 0 size_x 1 en abscisses et de 0 size_y 1 en ordonn es Couleurs type color int Une couleur est sp cifi e par ses composantes R V B R pour le rouge V pour le vert et B pour le bleu Chaque composante est un entier dans l intervalle 0 255 Les trois composantes sont group es en un int OxRRVVBB o RR sont les deux chiffres hexad cimaux pour la composante rouge VV pour la composante vert et BB pour la composante bleu 130 La biblioth que standard du syst me Caml Light value rgb int gt int gt int gt int rgb r v b renvoie l entier qui code la couleur avec pour composante rouge r pour composante verte v et pour composante bleue b Les entiers r v et b sont dans l intervalle 0 255 value set_color color gt unit Fixe la couleur courante du trac value black color value white color value red color value green color value blue color value yellow color value cyan
139. module de nom la cha ne litt rale cha ne la liste des modules ouverts en premi re position La directive close cha ne supprime de la liste des modules ouverts la premi re occurrence du module de nom cha ne L impl mentation peut fournir d autres directives pourvu qu elles r pondent la syntaxe ident cha ne o ident est le nom de la directive et la cha ne litt rale cha ne l argument de la directive Le comportement de ces directives suppl mentaires d pend de l impl mentation D finition du langage Caml 31 1 10 Impl mentations de modules impl mentation phrase d impl mentation phrase d impl mentation expr d finition de valeur d finition de type d finition d exception directive d finition de valeur let rec liaison let and liaison let L impl mentation d un module consiste en une suite de phrases d impl mentation ter min es par un double point virgule Une phrase d impl mentation est soit une expres sion soit une d finition de valeur de type ou d exception soit une directive Pendant l ex cution les phrases d impl mentation sont valu es en s quence dans leur ordre d apparition dans l impl mentation du module Les phrases d impl mentation r duites une expression sont valu es pour leurs effets Ex La phrase 3 n a pas d effets observables l ex cution La phrase print_int 1 2 print_newline affiche 3 sur la
140. mot sont des constantes D finition du langage Caml 15 1 6 Motifs motif ident motif as ident motif motif exprtype motif motif constante constructeur non constant motif motif motif motif tiquette motif tiquette motif motif motif motif motif La table ci dessous indique les priorit s relatives et l associativit des op rateurs et des constructions de motifs qui ne sont pas ferm es Les constructions qui ont la plus grande priorit viennent en t te Op rateur Associativit Constructeur ci droite gauche as Les motifs sont des mod les qui permettent la s lection de structures de donn es ayant une certaine forme et la liaison de leurs composantes des identificateurs Cette op ration de s lection est appel e filtrage en anglais pattern matching Son r sultat est soit cette valeur n est pas filtr e par ce motif soit cette valeur est filtr e par ce motif et produit cet ensemble de liaisons identificateur valeur 1 6 1 Motifs variables Un motif r duit un identificateur filtre n importe quelle valeur liant l identificateur la valeur Le motif _ filtre lui aussi n importe quelle valeur mais n op re pas de liaison Un identificateur ne doit pas appara tre plus d une fois dans un motif donn Ex Le motif x filtre la valeur 3 et lie x 3 Le motif x x est incorre
141. mps du bloc avant la prochaine allocation alloc_tuple n renvoie un nouveau petit bloc de taille n lt Max_young_wosize mots avec marqueur 0 Les champs de ce bloc doivent tre initialis s avec des valeurs l gales avant la prochaine allocation ou modification alloc_shr n t renvoie un nouveau bloc de taille n avec marqueur t La taille du bloc peut tre plus grande que Max_young_wosize ou plus petite mais dans ce cas il est plus efficace d appeler alloc au lieu de alloc_shr Si ce bloc est un bloc structur c est dire si t lt No_scan_tag alors les champs du bloc qui contiennent initialement des bits al atoires doivent tre initialis s avec des valeurs l gales l aide de la fonction initialize avant la prochaine allocation alloc_string n renvoie une cha ne de caract res de longueur n La cha ne con tient initialement des bits al atoires copy_string s renvoie une valeur cha ne de caract res contenant une copie de s une cha ne C termin e par un caract re nul copy_double d renvoie une valeur flottante initialis e avec le double d e alloc_array f a alloue un tableau de valeurs et appelle la fonction f sur chaque l ment du tableau a pour le transformer en valeur Le tableau a est un tableau de pointeurs termin par le pointeur nul La fonction f re oit chaque poin teur pour argument et renvoie une valeur Le bloc marqu z ro retourn par alloc_array f a est rempli avec les valeurs reto
142. nce pour le programmeur Caml averti On y suppose une solide connaissance pr alable du langage correspondant la lecture de ouvrage Le langage Caml Ce chapitre d finit formellement la syntaxe du langage Caml l aide de la notation BNF bien connue Il explique galement la s mantique des constructions mais d une mani re informelle sans pr tendre la rigueur math matique les mots sont employ s dans leur sens intuitif sans d finition plus labor e Nous avons omis les r gles de ty page statique des constructions afin d viter l introduction de la th orie math matique n cessaire les exprimer Nous faisons appel l intuition du lecteur pour retrouver les r gles de typage partir de la s mantique des constructions du langage Le lecteur curieux de savoir quoi ressemble une description compl tement formelle d un langage de la famille ML peut s attaquer a The Definition of Standard ML et a Commentary on Standard ML par Milner Tofte et Harper MIT Press Le langage et ses impl mentations Dans ce chapitre nous distinguons soigneusement le langage Caml d une part et d autre part les impl mentations du langage Caml comme le syst me Caml Light par exemple La d finition du langage Caml laisse volontairement un certain nombre de points non sp cifi s ou partiellement sp cifi s rendant les impl mentations libres de choisir un comportement qui respecte les contraintes Par exemple dans le cas
143. nit Renomme un fichier Le premier argument est l ancien nom et le second est le nouveau value getenv string gt string Renvoie la valeur associ e une variable d environnement dans l environnement du processus D clenche Not_found si la variable n est pas li e value chdir string gt unit Change le r pertoire de travail courant du processus exception Break D clench e lors d une interruption de l utilisateur si catch_break est activ e value catch_break bool gt unit catch_break d cide si les interruptions de l utilisateur mettent fin au programme comportement par d faut ou d clenchent simplement l exception Break Apr s catch_break true l exception Break est d clench e chaque interruption util isateur Apr s catch_break false le syst me d exploitation met fin au pro gramme en cas d interruption de l utilisateur 11 La biblioth que graphique Ce chapitre d crit les primitives graphiques portables fournies en standard dans les impl mentations de Caml Light sur micro ordinateurs Unix Sur les stations de travail Unix munies du syst me X Windows ces primitives Mac PC graphiques sont fournies par une biblioth que qui se trouve dans le r pertoire contrib libgraph de la distribution Caml Light Le trac a lieu dans une fen tre X s par e qui est cr e quand la fonction open_graph est appel e La commande camlgraph fournie par la biblioth que int gre les
144. non pas tous les types mais un certain type qui ne peut pas tre d termin la compilation Le programmeur est donc responsable du bon typage et devrait toujours donner explicitement le type attendu de la valeur retourn e l aide d une contrainte de type input_value canal type Le programme peut faire n importe quoi si l objet lu dans le fichier n appartient pas au type donn 106 La biblioth que standard du syst me Caml Light value seek_in in_channel gt int gt unit seek_in can pos fixe la position de lecture courante du canal can pos Fonc tionne uniquement pour les fichiers normaux value pos_in in_channel gt int Renvoie la position de lecture courante du canal donn value in_channel_length in_channel gt int Renvoie la taille totale nombre de caract res du canal donn Fonctionne unique ment pour les fichiers normaux Pour les autres fichiers le r sultat est non sp cifi value close_in in_channel gt unit Ferme le canal donn Le programme peut faire n importe quoi si l une quelconque des fonctions ci dessus est appel e sur un canal ferm 9 12 list op rations sur les listes value list_length a list gt int Renvoie la longueur nombre d l ments de la liste donn e value prefix a list gt a list gt a list Concat nation de deux listes value hd a list gt a Renvoie le premier l ment de la liste donn e D clenche Fai
145. nt gt unit Remplit un secteur d ellipse avec la couleur courante Les param tres sont les m mes que pour draw_arc value fill_ellipse int gt int gt int gt int gt unit Remplit une ellipse avec la couleur courante Les param tres sont les m mes que pour draw_ellipse value fill circle int gt int gt int gt unit Remplit un cercle avec la couleur courante Les param tres sont les m mes que pour draw_circle 132 La biblioth que standard du syst me Caml Light Images type image Le type abstrait des images en repr sentation interne De fa on externe les im ages sont repr sent es par des matrices de couleurs type color vect vect value transp color Dans les matrices de couleurs cette couleur repr sente un point transparent lorsqu on trace une image tous les points de l cran correspondant un point transparent dans l image ne seront pas modifi s alors que les autres points seront mis la couleur du point correspondant dans l image Ceci permet de surimposer une image sur un fond existant value make_image color vect vect gt image Convertit la matrice de couleurs donn e en une image Chaque sous tableau repr sente une ligne horizontale Tous les sous tableaux doivent avoir la m me longueur sinon l exception Graphic_failure est d clench e value dump_image image gt color vect vect Convertit une image en une matrice de couleurs value draw_image image
146. ntation doit autoriser des chaines de caract res litt rales d une longueur au moins gale 216 1 caract res 65535 caract res L impl mentation peut autoriser des cha nes litt rales plus longues Ex Bonjour repr sente la cha ne Bonjour r n repr sente la cha ne retour chariot saut de ligne a 097c repr sente la cha ne abc 0974 repr sente la cha ne b4 1 1 6 Mots cl s Les identificateurs suivants sont des mots cl s r serv s du langage et ne peuvent tre employ s comme des identificateurs and as begin do done downto else end exception for fun function if in let match mutable not of or prefix rec then to try type value where while with Les caract res ou suites de caract res suivants sont aussi des mots cl s l amp P 7 4 Gf eS lt lt lt lt lt gt lt gt gt gt gt gt E ea ced EASE 1 1 7 Blancs Les caract res suivants sont consid r s comme des blancs espace retour chariot saut de ligne saut de page tabulation tabulation verticale Les blancs ne sont pas significatifs sauf pour s parer deux identificateurs deux litt raux ou deux mots cl s cons cutifs qui seraient sinon pris pour un seul identificateur litt ral ou mot cl Ex Les trois formes 1 x 1 4 x et 1 1x sont lues de la m me mani re On a crit u pour marquer un espace f12 repr sente l identificateur de nom f12 f
147. omDeModule apparaissent dans la section pr lude En effet le pr lude est copi seulement dans le fichier m1 mais pas dans le fichier mli alors que la partie type d une d claration type est copi e dans le mli left symbole symbole right symbole symbole Anonassoc symbole symbole Associe une priorit et une associativit aux symboles donn s Tous les symboles d une m me ligne re oivent la m me priorit Cette priorit est plus forte que celle des symboles pr c demment d clar s par un left un right ou un nonassoc En revanche elle est plus faible que celle des symboles d clar s ensuite par un left un 4right ou un nonassoc Les symboles sont d clar s associatifs gauche left ou droite fright ou non associatifs nonassoc Ces symboles sont la plupart du temps des lex mes ils peuvent aussi tre des symboles ne correspondant aucun non terminal de la grammaire mais utilis s dans des directives prec 7 4 3 R gles La syntaxe des r gles est sans surprises non terminal symbole symbole action s mantique las symbole symbole action s mantique La directive prec symbole peut appara tre dans le membre droit d une r gle pour outrepasser la priorit et l associativit par d faut de la r gle en leur substituant celles du symbole donn Les actions s mantiques sont des expressions Caml Light arbitraires qui sont valu es pour produire l attribu
148. omme nombre et deux constructeurs Entier et Flottant qui sont utilisables la fois dans l impl mentation du module et dans les autres modules La phrase d interface type nombre d finit un type abstrait nombre L impl mentation du module doit contenir une d finition de ce type par exemple D finition du langage Caml 33 type nombre N of int Le constructeur de type nombre est accessible aux autres modules mais le constructeur de valeur N ne l est pas Les directives modifient le comportement du compilateur sur les phrases suivantes de l interface du module comme il est indiqu dans la section 1 9 Les directives ne concernent que l interface en cours de compilation en particulier elles n ont pas d effet sur les autres modules qui ouvrent l interface par la directive open 2 Extensions propres a Caml Light Ce chapitre d crit des extensions au langage Caml qui sont impl ment es dans le syst me Caml Light version 0 6 mais ne font pas partie du langage Caml de base Comme tout ce qui n est pas sp cifi dans le chapitre 1 les extensions pr sent es ici sont sujettes modification voire suppression dans le futur 2 1 Flux analyseurs syntaxiques et imprimeurs Caml Light fournit un type pr d fini des flux en anglais streams des suites de valeurs ventuellement infinies qui sont valu es la demande Il fournit galement des expressions et des motifs op rant sur les flux les express
149. on de camlyacc options grammairemly produit du code Caml Light pour un analyseur syntaxique dans le fichier grammaire m1 et son interface dans le fichier grammaire mli Le module engendr d finit une fonction d analyse syntaxique par point d entr e de la grammaire Ces fonctions ont les m mes noms que les points d entr e Les fonctions d analyse syntaxique prennent pour arguments un analyseur lexical une fonction des tampons d analyseurs syntaxiques vers les lex mes et un tampon d analyseur lexical et renvoient l attribut s mantique du point d entr e correspondant Les fonctions d analyse lexicale sont g n ralement produites partir d une sp cification d analyseur lexical par le programme camllex Les tampons d analyse lexicale appartiennent un type de donn es abstrait impl ment dans le module lexing de la biblioth que standard Les lex mes sont des valeurs du type somme token d fini dans l interface du fichier grammaire mli produit par camlyacc G n rateurs d analyseurs camllex camlyacc 73 7 4 Syntaxe des d finitions de grammaires Les d finitions de grammaires ont le format suivant HT pr lude At d clarations th r gles hh pilogue Les commentaires sont entour s par et comme en C 7 4 1 Pr lude et pilogue Les sections pr lude et pilogue sont du code Caml Light qui est copi tel quel dans le fichier grammaire ml Ces deux sections sont optionnelles L
150. on qu une valeur Caml Light normale sauf que la d claration est suivie d un signe de l arit de la fonction nombre d arguments et du nom de la fonction C correspon dante Par exemple voici comment la primitive input est d clar e dans l interface du module io de la biblioth que standard value input in_channel gt string gt int gt int gt int 4 input Les primitives ayant plusieurs arguments sont toujours curryfi es La fonction C n a pas obligatoirement le m me nom que la fonction Caml Light Les valeurs ainsi d clar es primitives dans une interface de module ne doivent pas tre impl ment es dans l impl mentation du module le fichier m1 Elles sont directe ment utilisables dans l impl mentation du module 8 1 2 Impl mentation des primitives Les primitives ayant au plus cinq arguments sont impl ment es par des fonctions C qui prennent des arguments de type value et renvoient un r sultat de type value Le type value est le type des repr sentations de valeurs Caml Light I encode les types de base entiers flottants cha nes ainsi que les structures de donn es Caml Light Le type value et les fonctions de conversion et macros associ es sont d crits en d tail par 80 Manuel d utilisation du syst me Caml Light la suite Par exemple voici la d claration de la fonction C qui impl mente la primitive input value input channel buffer offset length value channel buffer of
151. on terminaux la v rification de type est supprim e pour les symboles dont le type n est pas sp cifi par une directive type b pr fixe Nomme les fichiers de sortie pr fire ml pr fixe mli pr fixe output au lieu des noms par d faut 7 6 Un exemple complet En guise d exemple voici comment programmer une calculatrice quatre op rations Ce programme lit des expressions arithm tiques sur l entr e standard une par ligne et imprime leurs valeurs Voici la d finition de la grammaire Fichier de l analyseur syntaxique parser mly token lt int gt INT token PLUS MOINS FOIS DIV token PARENG PAREND token FINDELIGNE right PLUS MOINS priorit la plus faible right FOIS DIV priorit interm diaire nonassoc MOINSUNAIRE priorit la plus forte start ligne le point d entr e type lt int gt ligne hh ligne expr FINDELIGNE 1 expr INT 1 PARENG expr PAREND 2 expr PLUS expr 1 3 expr MOINS expr 1 3 expr FOIS expr 1 3 expr DIV expr 1 3 MOINS expr prec MOINSUNAIRE 2 G n rateurs d analyseurs camllex camlyacc 77 Voici la d finition de l analyseur lexical correspondant x Fichier lexer mll open parser Le type token est d fini dans l analyseur syntaxique parser mli exception Fin_de_fichier rule lexeme parse lt At n o
152. onde fonction qu on appelle enveloppe en anglais stub code est un simple enrobage de la premi re elle se contente de convertir les arguments Caml Light qu elle a re us en valeurs C pour appeler la premi re fonction puis convertit le r sultat C retourn en une valeur Caml Light Par exemple voici l enveloppe pour la primitive input value input channel buffer offset length value channel buffer offset length return Val_long getblock struct channel channel amp Byte buffer Long_val offset Long_val length Ici Val_long Long_val etc sont des macros de conversion sur le type value qu on expliquera plus tard Le travail effectif est accompli par la fonction getblock qui est d clar e ainsi long getblock channel p n struct channel channel Communication entre Caml Light et C 81 char p long n Pour crire du code C qui op re sur des valeurs Caml Light on dispose des fichiers d en t te en anglais headers suivants mlvalues h d finition du type value et des macros de conversion alloc h fonctions d allocation pour cr er des objets Caml Light structur s memory h diverses fonctions relatives la m moire pour les modifications en place de structures etc Ces fichiers r sident dans le r pertoire de la biblioth que standard de Caml Light usr local lib caml light dans l installation standard 8 1 3 Lier du code C avec du code Caml Light L
153. ons Caml Light arbitraires Elles sont valu es dans un contexte o l identificateur lexbuf est li au tampon d analyseur lexical courant Voici quelques utilisations typiques de lexbuf en conjonction avec les op rations sur tampons fournies par le module lexing de la biblioth que standard lexing__get_lexeme lexbuf Renvoie la cha ne reconnue lexing__get_lexeme_char lexbuf n Renvoie le n caract re de la cha ne reconnue Le premier caract re correspond n 0 lexing__get_lexeme_start lexbuf Renvoie la position absolue dans le texte d entr e du d but de la cha ne reconnue Le premier caract re lu dans le texte d entr e a la position 0 lexing__get_lexeme_end lexbuf Renvoie la position absolue dans le texte d entr e de la fin de la chaine reconnue Le premier caract re lu dans le texte d entr e a la position 0 point d entr e lexbuf O point d entr e est le nom d un autre point d entr e dans la m me d finition d analyseur lexical Appelle r cursivement l analyseur lexical sur le point d entr e donn Utile pour faire l analyse lexicale de commentaires emboit s par exemple 7 3 Vue d ensemble de camlyacc La commande camlyacc produit un analyseur syntaxique a partir d une sp cification de grammaire alg brique en anglais context free grammar annot e par des actions s mantiques dans le style de yacc En supposant que le fichier d entr e est grammaire mly l ex cuti
154. oo debug_mode drapeau bool en Passe le syst me interactif en mode de mise au point debug_mode true ou revient en mode standard debug_mode false Ex cuter debug_mode true quivaut lancer le syst me interactif avec option g En mode de mise au point les objets locaux non export s dans l interface d un module deviennent visibles au m me titre que les objets export s Voir la description de l option g la section 4 1 verbose_mode drapeau bool en Apr s verbose_mode true les compilations faites avec compile affichent les objets d finis par le module avec les types inf r s comme le fait l option i du compilateur ind pendant Les compilations redeviennent silencieuses apr s verbose_mode false cd nom de r pertoire Fixe le r pertoire de travail courant gc O Termine le cycle de r cup ration m moire en anglais garbage collection en cours et renvoie la quantit d espace libre dans le tas m moire en octets Si vous d sirez accomplir un cycle de r cup ration m moire complet appelez cette fonction deux fois de suite 56 Manuel d utilisation du syst me Caml Light 4 3 Le syst me interactif et le syst me de modules Les phrases tap es interactivement peuvent faire r f rence des identificateurs d finis dans d autres modules que le module top en utilisant les m mes m canismes que pour les modules compil s s par ment en utilisant soit des identificateurs qual ifi s nomDeModule
155. options I sur la ligne de com mande ces r pertoires sont parcourus de la droite vers la gauche le r pertoire le plus droite est parcouru le premier le plus gauche est parcouru le dernier Les r pertoires peuvent aussi tre ajout s au chemin d acc s directement dans le source des programmes avec la directive directory chapitre 2 o nom du fichier ex cutable Sp cifie le nom du fichier produit par l diteur de liens Unix Le nom par d faut est a out pour rester dans la tradition PC Le nom par d faut est CAML_OUT EXE Mac Le nom par d faut est Caml Out 0 ensemble de modules V Sp cifie quel ensemble de modules standard doit tre implicitement ouvert au d but d une compilation Il y a trois ensembles de modules disponibles cautious prudent fournit les op rations courantes sur les entiers flottants caract res cha nes tableaux ainsi que la gestion d exceptions des entr es sorties de base etc Les op rations de cet ensemble cautious font des tests de bornes lors des acc s aux cha nes et aux tableaux ainsi que de nombreuses v rifications de coh rence sur leurs arguments fast rapide fournit les m mes op rations que l ensemble cautious mais sans v rifications Les programmes compil s avec 0 fast sont donc un peu plus rapides mais ne sont pas s rs none rien supprime toutes les ouvertures automatiques de modules La compilation commence dans un envi
156. p rateur op rateur infixe dans la table de la figure 1 1 Ex x est interpr t e comme minus x x y est interpr t e comme prefix x y Les identificateurs associ s aux op rateurs sont ensuite qualifi s suivant les r gles de la section 1 7 2 Dans l environnement initial ils s valuent en des fonctions pr d finies dont le comportement est d crit dans la table Ex Dans l environnement initial le nom abr g minus s value en la fonction oppos sur les valeurs enti res L expression x s value donc en l oppos de x Le comportement de op rateur pr fixe expr et expr op rateur infixe expro peut changer si la signification de l identificateur associ op rateur pr fixe ou op rateur infixe est chang e soit par red finition des identificateurs soit par modifi cation de la liste des modules ouverts l aide des directives open et close D finition du langage Caml 27 Op rateur Identificateur Comportement dans l environnement associ par d faut prefix Addition enti re infixe prefix Soustraction enti re pr fixe minus Oppos entier prefix Multiplication enti re prefix Division enti re D clenche Division_by_zero si le second argument est nul Le r sultat n est pas sp cifi si un argument est n gatif mod prefix mod Modulo entier D clenche Division_by_zero si le second argument est nul Le r sultat n est
157. parce que l allocation de tail a eu lieu apr s l allocation de r 0 8 6 Un exemple complet Cette section explique dans les grandes lignes l interfa age de programmes Caml Light avec les fonctions de la biblioth que Unix curses Commen ons par l interface de module curses mli qui d clare les primitives et structures de donn es de la bib lioth que curses type window Le type window demeure abstrait value initscr unit gt window 1 curses_initscr and endwin unit gt unit 1 curses_endwin and refresh unit gt unit 1 curses_refresh and wrefresh window gt unit 1 curses_wrefresh and newwin int gt int gt int gt int gt window 4 curses_newwin and mvwin window gt int gt int gt unit 3 curses_mvwin and addch char gt unit 1 curses_addch and mvwaddch window gt int gt int gt char gt unit 4 curses_mvwaddch and addstr string gt unit 1 curses_addstr and mvwaddstr window gt int gt int gt string gt unit 4 curses_mvwaddstr beaucoup d autres fonctions omises On compile cette interface par camlc c curses mli Pour impl menter ces fonctions il nous faut seulement crire le code enveloppe les fonctions de base sont d j impl ment es dans la biblioth que curses Le fichier de code enveloppe curses c a l allure suivante include lt curses h gt include lt mlvalues h gt value curses_initscr unit v
158. placer le dossier lib en m me temps S lectionnez Quit dans le menu File pour revenir au Finder Instructions d installation 139 12 3 Les versions PC Deux versions sont distribu es pour le PC La premi re nomm e ici PC 8086 tourne sur tous les PC quel que soit leur processeur 8088 8086 80286 80386 80486 Pentium La deuxi me nomm e PC 80386 tourne en mode 32 bits prot g est donc plus rapide et peut utiliser plus de m moire que les 640K standard mais ne tourne que sur les PC processeurs 80386 80486 ou Pentium La disquette de distribution pour le PC contient les binaires pour les deux versions dans deux fichiers d archive au format ZIP cl6pc86 zip et cl6pc386 zip Dans la suite nous supposerons que la disquette de distribution est dans l unit A et que le disque dur sur lequel vous installez Caml Light est l unit C Si ce n est pas le cas remplacez A et C par les noms d unit s appropri s 12 3 1 La version PC 8086 Mat riel n cessaire Un PC tournant sous MS DOS version 3 1 ou post rieure 640K de RAM Environ 800K de m moire libre sur le disque dur Les primitives graphiques n cessitent une carte vid o CGA EGA ou VGA Installation Cr ez un r pertoire sur le disque dur o vous mettrez le syst me Caml Light Dans la suite nous supposerons que ce r pertoire est C CAML86 Si vous choisissez un r pertoire diff rent remplacez C CAML86 par le chemin absolu qu
159. pour avoir un seul fichier zi pour toute la biblioth que Pour tre plus concrets supposons que la bib lioth que comprenne trois modules windows images et buttons L id e est d ajouter un quatri me module mylib qui r exporte les parties publiques de windows images et buttons L interface mylib mli contient des d finitions pour les types qui sont publics export s avec leurs d finitions des d clarations pour les types qui sont abstraits ex port s sans leurs d finitions et des d clarations pour les fonctions qui peuvent tre appel es depuis le code de l utilisateur Le gestionnaire de biblioth ques camllibr 67 x File mylib mli type a option None Some of a x un type public type window and image and button trois types abstraits value new_window int gt int gt window les fonctions publiques and draw_image image gt window gt int gt int gt unit and L impl mentation du module mylib fait simplement correspondre les types abstraits et les fonctions publiques aux types et fonctions correspondants des modules windows images et buttons x File mylib ml type window windows__win and image images__pixmap and button buttons__t let new_window windows__open_window and draw_image images__draw and Les fichiers windows ml images ml et buttons ml peuvent ouvrir le module mylib pour avoir acc s aux types publics d finis dans l interface myl
160. primitives graphiques dans une boucle interactive Les fonctionnalit s de la biblioth que graphique sont alors les m mes que celles des autres versions de Caml Light Les fichiers de la distribution expliquent comment installer la biblioth que graphique et comment la lier avec vos propres programmes pour cr er des pro grammes ind pendants Les primitives graphiques sont disponibles partir de l application ind pendante qui ex cute le syst me interactif Elles ne sont pas disponibles partir de pro grammes compil s par camlc et qui tournent sous l interpr teur de commandes MPW Les trac s ont lieu dans une fen tre ind pendante qu on peut rendre visible l aide de l option Show graphic window du menu Les primitives graphiques sont disponibles en interactif et dans les programmes compil s s par ment La primitive open_graph passe tout l cran en mode graphique Sous le syst me interactif les phrases de l utilisateur et les r ponses du syst me sont galement imprim es sur l cran graphique en effa ant ventuellement certaines parties du dessin et en faisant d filer l cran quand l impression atteint le bas de l cran Les coordonn es de l cran sont interpr t es comme dans la figure 11 1 Le syst me de coordonn es utilis est le m me qu en math matiques y augmente de bas en haut et les angles sont mesur s en degr s dans le sens trigonom trique Conceptuellement le trac
161. que la taille du tas augmente lentement c est probablement que vous essayez de construire une structure de donn es avec trop de cellules une infinit Si au contraire vous voyez appara tre peu de messages Growing heap mais que la taille du tas augmente beaucoup a chaque fois c est probablement que vous demandez la construction d une chaine ou d un tableau trop grands 6 Le gestionnaire de biblioth ques camllibr Mac Cette commande est un outil MPW et non pas une application Macintosh ind pendante 6 1 Vue d ensemble Le programme camllibr r unit dans un seul fichier un ensemble de fichiers de code compil fichiers zo Le fichier r sultat est aussi un fichier de code compil et poss de aussi l extension zo On peut le passer la phase d dition de liens du compilateur camlc en lieu et place de l ensemble des fichiers de code d origine Autrement dit apr s Vex cution de camllibr o biblioth que zo mod1 zo mod2 zo mod3 zi mod4 zo tous les appels l diteur de liens de la forme camlc biblioth que zo sont exactement quivalents a camlc modi zo mod2 zo mod3 zi mod4 zo La principale utilisation de camllibr est de construire une biblioth que compos e de plusieurs modules de cette fa on les utilisateurs de la biblioth que n ont qu un fichier zo sp cifier sur la ligne de commande de camlc au lieu de toute une s rie de fichiers zo un par module conten
162. r p t e dans un environnement o la valeur locale ident est tour tour li e aux valeurs n n 1 p 1 p Le corps de la boucle n est jamais valu si n gt p L expression for tout enti re s value en la valeur L expression for ident expr downto expr do expr done s value de la m me mani re sauf que ident est successivement li aux valeurs n n 1 p 1 p Le corps de la boucle n est jamais valu si n lt p Ex for i 1 to n do print_int i print_newline done imprime l cran tous les entiers de 1 n et n imprime rien sin lt 1 1 7 12 Gestion d exceptions L expression try expr with motif gt expr motif gt expr value l expression expr et retourne sa valeur si l valuation de expr ne d clenche aucune exception Si l valuation de expr d clenche une exception la valeur exceptionnelle est filtr e par les motifs motif motif Si le filtrage par motif r ussit expression associ e expr est valu e et sa valeur devient la valeur de l expression try L valuation de expr a lieu dans un environnement enrichi par les liaisons effectu es pendant le filtrage Si plusieurs motifs filtrent la valeur de expr celui qui appara t le premier dans Vexpression try est s lectionn Si aucun motif ne filtre la valeur de expr la valeur exceptionnelle est relanc e d clench e nouveau et donc traverse silencieusement la construction try Ex
163. r blocs de taille z ro atomes marqu s par le num ro du constructeur Les constructeurs non constants dont l argument est un n uplet sont repr sent s par un bloc de taille n marqu par le num ro du constructeur les n champs contiennent les composants du n uplet argument Les autres constructeurs non constants sont repr sent s par un bloc de taille 1 marqu par le num ro du constructeur le champ 0 contient la valeur de l argument du constructeur Exemple Terme construit Repr sentation O Taille 0 marqueur 0 false Taille 0 marqueur 0 true Taille 0 marqueur 1 C Taille 0 marqueur 0 h t Taille 2 marqueur 1 premier champ h second champ t 84 Manuel d utilisation du syst me Caml Light 8 4 Op rations sur les valeurs 8 4 1 Tests de type e Is_int v est vrai si la valeur v est un entier non allou faux sinon e Is_block v est vrai si la valeur v est un pointeur vers un bloc et faux si c est un entier non allou 8 4 2 Op rations sur les entiers e Val_long renvoie la valeur qui code le long int l e Long_val v renvoie le long int cod dans la valeur v e Val_int i renvoie la valeur qui code l int i e Int_val v renvoie l int cod dans la valeur v 8 4 3 Acc s aux blocs Wosize_val v renvoie la taille de la valeur v en mots en t te non compris Tag_val v renvoie le marqueur de la valeur v i me Field v n renvoie la valeur
164. remier l ment de la file q ou d clenche Empty si la file est vide value peek a t gt a peek q renvoie le premier l ment de la file q sans le supprimer de la file ou d clenche Empty si la file est vide value clear a t gt unit Supprime tous les l ments d une file value length a t gt int Renvoie le nombre d l ments d une file value iter a gt b gt a t gt unit iter f q applique f tous les l ments de la file q tour tour en commen ant par l ment le plus anciennement entr pour terminer par l l ment le plus r cemment entr La file elle m me n est pas modifi e 10 10 random g n rateur de nombres pseudo al atoires value init int gt unit Initialise le g n rateur al atoire en utilisant pour germe en anglais seed Vargument fourni Le m me germe produit toujours la m me suite de nombres value int int gt int random__int limite renvoie un nombre entier al atoire entre 0 compris et limite non compris L entier Limite doit tre inf rieur 230 value float float gt float random__float limite renvoie un nombre flottant al atoire entre 0 compris et limite non compris 10 11 sort tri et fusion de listes value sort a gt a gt bool gt a list gt a list Trie une liste en ordre croissant selon un ordre donn Le pr dicat doit renvoyer true si son premier argument est inf rieur ou
165. repr sentation interm diaire appel e style passage de continu ations en anglais continuation passing style On y montre comment appliquer ML de nombreuses optimisations de programme 13 4 Applications de ML Les rapports qui suivent illustrent l utilisation de ML dans des domaines sortant nettement de ses premi res applications d monstration automatique et compilation 148 Annexes Emmanuel Chailloux et Guy Cousineau The MLgraph primer Rapport tech nique 92 15 Ecole Normale Sup rieure 1992 Disponible par FTP anonyme sur ftp ens fr Ce rapport d crit une biblioth que Caml Light pour produire des images Postscript par manipulations de haut niveau Xavier Leroy Programmation du syst me Unix en Caml Light Rapport tech nique 147 INRIA 1992 Disponible par FTP anonyme sur ftp inria fr Un cours de programmation du syst me Unix montrant l utilisation de la bib lioth que Caml Light donnant acc s aux appels syst me Unix John H Reppy Concurrent programming with events The concurrent ML manual Cornell University 1990 Disponible par FTP anonyme sur research att com Concurrent ML ajoute Standard ML of New Jersey la possibilit de programmer plusieurs processus s ex cutant en parall le et communiquant via des canaux de communication Jeannette M Wing Manuel Faehndrich J Gregory Morrisett et Scottt Nettles Extensions to Standard ML to support transactions Rapport technique CMU
166. reur standard Un caract re fin de fichier sur l entr e standard met fin au processus camllight voir aussi la fonction quit la section 4 2 Le syst me interactif ne fait pas lui m me l dition de ligne mais il peut facile ment tre utilis en conjonction avec un diteur ligne externe tel que fep il suffit de lancer fep emacs camllight ou fep vi camllight tout moment l analyse syntaxique la compilation ou l valuation de la phrase courante peuvent tre interrompues en appuyant sur ctr1 C plus pr cis ment en envoyant le signal intr au processus camllight Une interruption vous ram ne au signe d invite Le syst me interactif est une application Macintosh ind pendante nomm e Caml Light Cette application ne n cessite pas l environnement MPW Macintosh Programmer s Workshop Une fois lanc e depuis le Bureau en anglais Finder l application ouvre deux fen tres une fen tre d entr e intitul e Caml Light Input et une fen tre de sortie intitul e Caml Light Output Les phrases sont tap es dans la fen tre Caml Light Input La fen tre Caml Light Output imprime une copie des phrases entr es au fur et mesure de leur traitement par Caml Light entrelac es avec les r ponses du syst me La touche retour chariot envoie le contenu de la fen tre d entr e la boucle interactive La touche entr e du 92 PC Manuel d utilisation du syst me Caml Light pav
167. ring gt int Convertit une cha ne en un entier en d cimal cas par d faut ou en hexad cimal octal ou binaire si la cha ne commence par Ox 0o ou Ob D clenche Failure int_of_string si la chaine donn e n est pas la repr sentation d un entier La biblioth que de base 101 9 11 io entr es sorties avec tampons type in_channel type out_channel Les types abstraits des canaux en anglais channel d entr es sorties exception End_of_file D clench e quand une op ration de lecture ne peut tre achev e parce que la fin du fichier est atteinte value stdin in_channel value std_in in_channel value stdout out_channel value std_out out_channel value stderr out_channel value std_err out_channel Les canaux standard du processus entr e standard standard input sortie stan dard standard output et sortie d erreur standard standard error std_in std_out et std_err sont respectivement synonymes de stdin stdout et stderr value exit int gt a Vide les tampons associ s amp std_out et std_err et termine le processus en renvoyant son argument comme code de retour en anglais status code au systeme d exploitation Par convention le code 0 indique qu il n y a pas eu d erreurs et un petit entier positif signale un chec Cette fonction doit tre appel e a la fin de tous les programmes ind pendants qui crivent des r sultats sur std_out ou std_err a d faut le programme peut
168. ronnement presque vide Cette option n est pas d usage g n ral sauf pour compiler la biblioth que standard elle m me Le mode de compilation par d faut est 0 cautious Voir le chapitre 9 pour une liste compl te des modules des ensembles cautious et fast Imprime les num ros de version des diff rentes passes du compilateur Compilation ind pendante camlc 47 3 3 Les modules et le syst me de fichier Cette section a pour but de clarifier la relation entre les noms des modules et les noms des fichiers qui contiennent leur interface compil e et leur impl mentation compil e Le compilateur d duit toujours le nom du module en cours de compilation en prenant le nom de base du fichier source m1 ou mli C est a dire qu il supprime le nom du r pertoire s il existe ainsi que le suffixe ml ou mli Les fichiers produits zi et zo ont le m me nom de base que le fichier source donc les fichiers compil s produits par le compilateur ont toujours leur nom de base identique au nom du module qu ils d crivent fichiers zi ou impl mentent fichiers zo Pour les fichiers d interface compil e fichiers zi cet invariant doit imp rativement tre maintenu puisque le compilateur se repose sur lui pour retrouver les fichiers d interface des modules utilis s par le module en cours de compilation Il est donc tr s risqu et g n ralement incorrect de renommer les fichiers zi Il est admissible de les d placer d
169. s dans la version PC 8086 7 1 Vue d ensemble de camllex La commande camllex produit un analyseur lexical partir d un ensemble d expressions rationnelles en anglais regular expressions annot es par des actions s mantiques dans le style de lex En supposant que le fichier d entr e est lexer m11 70 Manuel d utilisation du syst me Caml Light l ex cution de camllex lexer mll produit du code Caml Light pour un analyseur lexical dans le fichier lexer ml Ce fichier d finit une fonction d analyse lexicale par point d entr e de la d finition de l analyseur lexical Ces fonctions ont les m me noms que les points d entr e Les fonc tions d analyse lexicale prennent en argument un tampon d analyse lexicale et renvoient l attribut s mantique du point d entr e correspondant Les tampons d analyse lexicale appartiennent un type de donn es abstrait impl ment dans le module lexing de la biblioth que standard Les fonctions create_lexer_channel create_lexer_string et create _lexer du module lexing cr ent des tampons d analyse lexicale qui lisent partir d un canal d entr e d une cha ne de caract res ou d une fonction de lecture quelconque respectivement Voir la description du module lexing section 10 5 Quand elles sont utilis es avec un analyseur syntaxique engendr par camlyacc les actions s mantiques calculent une valeur qui appartient au type token d fini par le module d an
170. s de modules Les arguments se terminant par mli sont consid r s comme des fichiers source pour des interfaces de modules Les interfaces de modules d clarent les identifi cateurs globaux export s et d finissent les types de donn es publics partir du fichier mli le compilateur camlc produit une interface compil e dans le fichier zi Les arguments se terminant par ml sont consid r s comme des fichiers source pour des impl mentations de modules Les impl mentations de modules lient des identificateurs globaux des valeurs d finissent des types de donn es priv s et contiennent des expressions valuer pour leurs effets partir du fichier ml le compilateur camlc produit du code compil dans le fichier x zo Si le fichier d interface x mli existe le syst me v rifie la conformit de l impl mentation du module x m1l avec l interface correspondante x zi qui doit avoir t pr alablement compil e Si aucune interface x mli n est fournie la compilation de x ml produit un fichier d interface compil e x zi en plus du A4 Manuel d utilisation du syst me Caml Light fichier de code compil x z0 Le fichier x zi obtenu correspond une interface qui exporte tout ce qui est d fini dans l impl mentation x ml Les arguments se terminant par zo sont consid r s comme des fichiers de code compil Ces fichiers sont li s entre eux avec les fichiers de code obtenus en compilant les arguments m1 s
171. s modifi value draw_circle int gt int gt int gt unit draw_circle x y r trace un cercle avec pour centre x y et rayon r Le point courant n est pas modifi value set_line_width int gt unit Fixe la largeur des points et des lignes trac s avec les fonctions ci dessus Trac de texte value draw_char char gt unit value draw_string string gt unit Trace un caract re ou une cha ne de caract res avec le coin inf rieur gauche la position courante Apr s le trac la position courante est fix e au coin inf rieur droit du texte trac value set_font string gt unit value set_text_size int gt unit Fixe la police et la taille des caract res utilis s pour tracer du texte L interpr tation des arguments de set_font et set_text_size d pend de l impl mentation value text_size string gt int int Renvoie les dimensions qu aurait le texte donn s il tait trac avec les polices et tailles courantes Remplissage value fill_rect int gt int gt int gt int gt unit fill_rect x y w h remplit avec la couleur courante le rectangle dont le coin inf rieur gauche est en x y et dont la largeur et la hauteur sont respectivement weth value fill_poly int int vect gt unit Remplit le polygone donn avec la couleur courante Le tableau contient les co ordonn es des sommets du polygone value fill arc int gt int gt int gt int gt int gt i
172. s n est pas modifi Cette fonction permet l acc s non destructif un flux 9 16 string op rations sur les cha nes de caract res value string_length string gt int Renvoie la longueur nombre de caract res de la cha ne donn e value nth_char string gt int gt char nth_char s n renvoie le caract re num ro n de la cha ne s Le premier caract re est le caract re num ro 0 Le dernier caract re a le num ro string_length s 1 D clenche Invalid_argument nth_char si n est en dehors de l intervalle 0 string_length s 1 value set_nth_char string gt int gt char gt unit set_nth_char s n c modifie la cha ne s en place rempla ant le caract re num ro n par c D clenche Invalid_argument set_nth_char si n est en dehors de l intervalle 0 string_length s 1 La biblioth que de base 111 value prefix string gt string gt string si s2 renvoie une nouvelle cha ne contenant la concat nation des cha nes s1 et s2 value sub_string string gt int gt int gt string sub_string s debut long renvoie une nouvelle chaine de longueur long con tenant les caract res num ro debut jusqu debut long 1 de la cha ne s D clenche Invalid_argument sub_string si debut et long ne d signent pas une sous chaine valide de s c est dire si debut lt 0 ou long lt 0 ou debut long gt string_length s value create_string int gt string create_string n ren
173. sateur propri taire du fichier grp les droits du groupe propri taire du fichier oth les droits des autres isuid et isgid sont pour les fichiers set user id et set group id respectivement type open_flag O_RDONLY ouverture en lecture seule O_WRONLY ouverture en criture seule O_RDWR ouverture en lecture et criture O_APPEND ouverture en ajout O_CREAT cr ation du fichier s il n existe pas O_TRUNC troncature du fichier 4 0 s il existe O_EXCL x chec si le fichier existe O_BINARY ouverture en mode binaire O_TEXT ouverture en mode texte Les commandes pour la fonction open value exit int gt a Ach ve le programme et renvoie le code de retour en anglais status code donn au syst me d exploitation Au contraire de la fonction exit du module io cette fonction ne vide pas les canaux de sortie et d erreur standard 126 La biblioth que standard du syst me Caml Light value open string gt open_flag list gt file_perm gt int Ouvre un fichier Le second argument est le mode d ouverture Le troisi me ar gument pr cise les droits utiliser si le fichier doit tre cr Le r sultat est un descripteur de fichier ouvert sur le fichier value close int gt unit Ferme un descripteur de fichier value remove string gt unit Supprime le fichier de nom donn du syst me de fichiers value rename string gt string gt u
174. t a l expression de type int endo est quivalente int gt int 30 Manuel de r f rence du langage Caml Types abstraits La d finition de type params ident d finit ident comme un type abstrait Si elle ap para t dans l interface d un module cette d finition permet d exporter un constructeur de type tout en cachant sa repr sentation dans l impl mentation du module 1 8 2 D finitions d exceptions d finition d exception exception def constr and def constr Les d finitions d exceptions ajoutent de nouveaux constructeurs au type somme pr d fini exn des valeurs exceptionnelles Les constructeurs sont d clar s comme dans le cas d une d finition de type somme Ex exception Fini and Erreur of string d finit deux nouveaux constructeurs du type exn un constructeur constant nomm Fini et un constructeur non constant nomm Erreur 1 9 Directives open cha ne close chaine ident cha ne directive Les directives contr lent le comportement du compilateur Elles s appliquent la suite de l unit de compilation courante le reste du fichier dans le cas d une compilation non interactive le reste de la session dans le cas d une utilisation interactive Les deux directives open et close modifient la liste des modules ouverts que le compilateur utilise pour compl ter les identificateurs non qualifi s comme d crit dans la section 1 2 La directive open cha ne ajoute le
175. t les objets de la classe nonterminal sont la suite de caract res hello ou bien une parenth se ouvrante suivie d un objet de la classe nonterminal et d une parenth se fermante l int rieur des r gles de production on emploie les notations suivantes Notation Signification Exemple partie optionnelle let rec signifie let ou let rec alternative 0 1 signifie O ou 1 intervalle 0 9 signifie un chiffre ee r p tition a signifie z ro un ou plusieurs a or r p tition stricte 0 9 signifie un ou plusieurs chiffres regroupement 0 1 2 signifie 0 ou 1 puis 2 1 1 Conventions lexicales 1 1 1 Identificateurs ident lettre lettre 0 9 _ gt lettre A Z a z Les identificateurs sont des suites de lettres chiffres _ le caract re soulign et le caract re apostrophe qui commencent par une lettre Les lettres contiennent au moins les 52 lettres majuscules et minuscules du jeu de caract res ASCII L impl mentation peut autoriser parmi les lettres des caract res hors du jeu de caract res ASCII c est dire de code sup rieur ou gal 128 comme par exemple les lettres accentu es dans le jeu ISO 8859 1 Les identificateurs ne doivent pas contenir deux caract res soulign s successifs __ L impl mentation est susceptible de limiter le nombre de caract res d un identificateur mais cette limite doit tre sup rieure 256 caract res
176. t comme une valeur globale Dans le cas d un con structeur de valeurs la d finition de type qui l introduit d termine si le constructeur est constant ou non 1 3 Valeurs Cette section d crit les valeurs manipul es par les programmes Caml Light 1 3 1 Nombres entiers Les valeurs enti res sont les nombres entiers dans l intervalle 2 230 1 c est dire de 1073741824 1073741823 L impl mentation peut autoriser un intervalle de D finition du langage Caml 11 valeurs enti res plus grand 1 3 2 Nombres d cimaux Les valeurs d cimales sont des nombres d cimaux repr sent s en virgule flottante c est dire sous la forme m 2 o la mantisse m et l exposant e sont deux nombres en tiers dans des intervalles non sp cifi s Toutes les caract ristiques des valeurs d cimales d pendent de l impl mentation et de la machine en particulier l intervalle des nombres repr sentables le nombre de chiffres significatifs et la fa on dont les r sultats sont ar rondis On encourage les impl mentations utiliser si possible des flottants double pr cision la norme IEEE 1 3 3 Caract res Les caract res sont repr sent s comme des entiers entre 0 et 255 Les codes des caract res entre 0 et 127 sont interpr t s d apr s le standard ASCII L interpr tation des codes des caract res entre 128 et 255 d pend de l impl mentation et de la machine 1 3 4 Cha nes de caract res
177. t gt bool value ge_int int gt int gt bool Comparaisons entre entiers value min int gt int gt int Renvoie le plus petit de ses arguments 100 La biblioth que standard du syst me Caml Light value max int gt int gt int Renvoie le plus grand de ses arguments value abs int gt int Renvoie la valeur absolue de son argument Op rations bit bit value prefix land int gt int gt int Et logique bit bit value prefix lor int gt int gt int Ou logique bit bit value prefix lxor int gt int gt int Ou exclusif logique bit bit value Inot int gt int Compl ment logique bit bit value prefix lsl int gt int gt int value lshift_left int gt int gt int n lsl m ou de fa on quivalente lshift_left n m d cale n vers la gauche de m bits value prefix lsr int gt int gt int n lsr m d cale n vers la droite de m bits C est un d calage logique des bits z ro sont introduits gauche sans tenir compte du signe value prefix asr int gt int gt int value lshift_right int gt int gt int n asr m ou de fa on quivalente 1shift_right n m d cale n vers la droite de m bits C est un d calage arithm tique le bit de signe est recopi Fonctions de conversion value string_of_int int gt string Convertit un entier en une cha ne de caract res en repr sentation d cimale value int_of_ string st
178. t et sort la cha ne r sultat sur le canal sortie Le format est une cha ne de caract res qui contient deux types d objets des caract res qui sont simplement copi s sur le canal de sortie et des sp cifications de conversion qui chacune convertissent et impriment un argument Les sp cifications de conversion consistent en un caract re suivi par des options de mise en forme largeurs de champs suivies par un caract re de conversion Voici les diff rents caract res de conversion et leur signification d ou i convertit un entier en un d cimal sign u convertit un entier en un d cimal non sign 122 La biblioth que standard du syst me Caml Light x convertit un entier en un hexad cimal non sign en lettres minuscules Ps convertit un entier en un hexad cimal non sign en lettres majuscules ins re une cha ne n c ins re un caract re f convertit un flottant en notation d cimale dans le style dddd ddd e ou E convertit un flottant en notation d cimale dans le style d ddd e dd mantisse et exposant g ou G convertit un flottant en notation d cimale dans le style f ou e suivant ce qui est le plus compact b convertit un bool en en la cha ne true ou false On se reportera la fonction printf de la biblioth que C pour la signification des options de mise en forme L exception Invalid_argument est d clench e si les types des arguments donn s ne correspondent pas au
179. t le second est not constructeur non constant v o la valeur v est appel e argument du constructeur Les constantes suivantes sont des constructeurs constants pr d finis false le bool en faux la valeur rien true le bool en vrai la liste vide Le constructeur de listes est un constructeur non constant pr d fini Les listes sont des cas particuliers de valeurs de types somme elles sont engendr es par les construc teurs et Le constructeur repr sente la liste vide La liste dont la t te est v et le reste v2 est repr sent e par v1 V2 c est dire le constructeur avec pour argument la paire v1 v2 1 3 9 Fonctions Les valeurs fonctionnelles sont des fonctions partielles des valeurs dans les valeurs 1 4 Expressions de type exprtype ident exprtype exprtype gt exprtype exprtype exprtype constructeur de type exprtype constructeur de type exprtype exprtype constructeur de type La table ci dessous indique les priorit s relatives et l associativit des op rateurs et des constructions de type qui ne sont pas ferm es Les constructions qui ont la plus grande priorit viennent en t te Op rateur Associativit Constructeur de type gt droite Les expressions de type d notent des types dans les d finitions de types de donn es et dans les contraintes de type sur les motifs et les expressions Variabl
180. t pas le m me objet physique L galit entre valeurs fonctionnelles d clenche l exception Invalid_argument L galit entre structures de donn es cycliques peut ne pas terminer value prefix lt gt a gt a gt bool N gation de prefix value prefix a gt a gt bool e1 e2 teste l galit physique de e1 et e2 Sur les entiers et les caract res c est quivalent de l galit structurelle Sur les structures mutables e1 e2 est vrai si et seulement si une modification physique de e1 affecte aussi e2 Sur les struc tures non mutables le comportement de prefix d pend de l impl mentation mais e1 e2 implique toujours e1 e2 value prefix a gt a gt bool N gation de prefix 9 5 exc exceptions value raise exn gt a D clenche une valeur exceptionnelle Exceptions pr d finies d usage g n ral exception Out_of_memory D clench e par le r cup rateur de m moire en anglais garbage collector quand la m moire disponible est insuffisante pour terminer le calcul exception Invalid_argument of string D clench e par certaines fonctions de biblioth que pour signaler que les arguments donn s n ont pas de sens exception Failure of string D clench e par certaines fonctions de biblioth que pour signaler qu elles ne sont pas d finies sur les argument donn s 96 La biblioth que standard du syst me Caml Light exception
181. t s mantique attach au non terminal d fini Les ac tions s mantiques peuvent acc der aux attributs s mantiques des symboles du membre droit de leur r gle avec la notation 1 est l attribut du premier symbole le plus gauche 2 est l attribut du second symbole etc G n rateurs d analyseurs camllex camlyacc 75 Les actions intervenant au milieu des r gles ne sont pas permises La r cup ration d erreur n est pas impl ment e 76 Manuel d utilisation du syst me Caml Light 7 5 Options TV Les options suivantes sont reconnues par camlyacc Produit une description des tables de l analyseur syntaxique et un compte rendu des conflits engendr s par les ambigu t s de la grammaire Cette description est crite dans le fichier grammaire output Produit un fichier grammaire ml d coup en phrases plus petites Les actions s mantiques sont recopi es dans le fichier grammaire ml sous la forme d un tableau de fonctions Par d faut ce tableau est construit en une seule phrase Pour des grammaires de grande taille ou contenant des actions s mantiques complexes la phrase en question peut requ rir une grande quantit de m moire pendant sa compilation par Caml Light Avec l option s le tableau des actions est construit incr mentalement en compilant une phrase par action Ceci permet d abaisser les besoins en m moire du compilateur mais il n est plus possible d inf rer le type des symboles n
182. t_byte out_channel gt int gt unit crit un entier sur huit bits sous la forme du caract re de ce code sur le canal de sortie donn L entier donn est pris modulo 256 value output_binary_int out_channel gt int gt unit crit une repr sentation binaire d un entier sur le canal de sortie donn La seule fa on s re de le relire est d utiliser la fonction input_binary_int La repr sentation est compatible entre toutes les machines pour une version donn e de Caml Light value output_value out_channel gt a gt unit crit la repr sentation d une valeur structur e d un type quelconque sauf les fonctions sur le canal de sortie donn Les circularit s et le partage l int rieur de la valeur sont d tect s et pr serv s L objet peut tre relu par la fonction input_value La repr sentation est compatible entre toutes les machines pour une version donn e de Caml Light D clenche Invalid_argument extern functional value quand l argument contient une valeur fonctionnelle 104 La biblioth que standard du syst me Caml Light value seek_out out_channel gt int gt unit seek_out can pos fixe la position courante d criture du canal can pos Fonc tionne uniquement pour les fichiers normaux Pour les autres types de fichiers terminaux tuyaux en anglais pipes et prises en anglais sockets le com portement n est pas sp cifi value pos_out out_channel gt int
183. tion Finalement le composant ident lie simplement Videntificateur ident au flux filtr L impl mentation actuelle restreint ident figurer en dernier dans un motif de flux Le filtrage de flux proc de en deux tapes d abord un motif est s lectionn par filtrage du flux par les premiers composants des diff rents motifs de flux puis le reste du flux est filtr par les composants suivants du motif s lectionn Si les composants suivants ne sont pas compatibles l exception Parse_error est d clench e Il n y a pas de retour en arri re en anglais backtracking ici le filtrage de flux choisit de mani re irr versible le motif s lectionn par examen du premier composant Si aucun des premiers composants des motifs de flux ne filtre exception Parse_failure est d clench e Lorsque l exception Parse_failure se d clenche pendant le filtrage avec la premi re composante d un motif le filtrage de flux l intercepte et passe la prochaine alternative Ex let oui_ou_non function lt oui gt gt true lt non gt gt false let consent function Extensions propres Caml Light 37 lt bien s r gt gt true lt oui_ou_non x gt gt x lt euh oui_ou_non x gt gt x Voici quelques exemples d application de consent divers flux consent lt bien sir gt a pour r sultat true Le premier cas de consent s applique consent
184. tion 1 9 L valuation d une phrase d impl mentation r duite une directive ne produit aucun effet ex cution Les directives ne concernent que l impl mentation en cours de compilation en particulier elles n ont pas d effet sur les autres modules qui font r f rence aux globaux export s par l interface en cours de compilation 32 Manuel de r f rence du langage Caml 1 11 Interfaces de modules interface phrase d interface d claration de valeur d claration de type d claration d exception phrase d interface directive d claration de valeur value decl val and decl val decl val ident expression de type Les interfaces de modules d clarent les objets globaux valeurs globales constructeurs de types constructeurs de valeurs tiquettes d enregistrements qu un module ex porte c est dire rend accessibles aux autres modules Les autres modules peuvent faire r f rence ces globaux en utilisant des identificateurs qualifi s ou la directive open comme expliqu dans la section 1 2 Une interface de module consiste en une suite de phrases d interface termin es par un double point virgule Une phrase d interface est soit une d claration de valeur soit une d claration de type soit une d claration d exception soit une directive Les d clarations de valeurs d clarent les valeurs globales qui sont export es par l impl mentation du module et les types avec lesquels e
185. tion entre Caml Light et C 85 8 4 4 Allocation de blocs Du point de vue des fonctions d allocation les blocs sont group s selon leur taille en blocs de taille z ro petits blocs taille inf rieure ou gale Max_young_wosize et gros blocs taille sup rieure Max_young_wosize chaque classe de taille de bloc sa fonction d allocation La constante Max_young_wosize est d clar e dans le fichier mlvalues h Sa valeur est au moins 64 mots si bien que tout bloc de taille constante inf rieure ou gale 64 est consid r comme petit Pour les blocs dont la taille est calcul e l ex cution il faut comparer cette taille avec Max_young_wosize pour d terminer la bonne proc dure d allocation e Atom t renvoie un atome bloc de taille z ro avec marqueur t Les blocs de taille z ro sont pr allou s en dehors du tas Il est incorrect d essayer d allouer un bloc de taille z ro avec les fonctions de la section 8 4 4 Par exemple Atom 0 repr sente false et Atom 1 repr sente true Pour plus de clart mlvalues h d finit des macros Val_unit Val_false et Val_true alloc n t renvoie un nouveau petit bloc de taille n lt Max_young_wosize mots avec marqueur t Si ce bloc est un bloc structur autrement dit si t lt No_scan_tag alors les champs du bloc qui contiennent initialement des bits al atoires doivent tre initialis s avec des valeurs l gales en utilisant l affectation directe aux cha
186. trait es comme si elles avaient t tap es sur l entr e standard En particulier les identificateurs globaux d finis par ces phrases sont enregistr s dans le module nomm top et non pas dans un nouveau module nom de fichier Charge en m moire le code source de l impl mentation d un module Lit compile et ex cute les phrases source du fichier nom de fichier L extension ml est au tomatiquement ajout e a nom de fichier si elle en tait absente La fonction load se comporte presque comme include sauf qu un nouveau module est cr avec pour nom le nom de base de nom de fichier Les identificateurs globaux d finis dans le fichier nom de fichier sont enregistr s dans ce module au lieu du module top dans le cas de la fonction include Par exemple en supposant que le fichier foo ml contient la seule phrase let bar 1 ex cuter load foo d finit l identificateur foo__bar avec pour valeur 1 Attention le module charg n est pas automatiquement ouvert l identificateur bar n est donc pas compl t automatiquement en foo__bar Pour obtenir ce r sultat vous devez encore ex cuter la directive open foo apr s avoir charg le fichier foo ml compile nom de fichier Compile une impl mentation ou une interface de module fichier ml ou mli La compilation se d roule exactement comme avec le compilateur ind pendant tout se passe comme si on avait fait camlc c nom de fichier Si le syst me
187. tre un 386 pour ex cuter ce programme Clairement vous devrez vous contenter de la version PC 8086 car votre machine n a pas un processeur 80386 ou 80486 CPU must be in REAL mode not V86 mode L unit centrale doit tre en mode r el et non pas en mode V86 Voil un probl me plus d licat Un certain nombre de programmes utilitaires mettent le processeur 80386 dans un mode particulier appel mode 86 virtuel Instructions d installation 143 virtual 86 ou V86 qui emp che le fonctionnement des programmes tour nant en mode 32 bits prot g Il se trouve justement que la version PC 80386 de Caml Light tourne en mode 32 bits prot g Les utilitaires qui provoquent ce syndrome sont en particulier e certains pilotes de p riph riques qui fournissent des services de gestion m moire e certains pilotes de p riph riques utilis s en conjonction avec des programmes de mise au point en anglais debuggers comme par exemple tdh386 sys pour Turbo Debugger La version PC 80386 ne peut pas d marrer quand l un quelconque de ces pro grammes est actif Pour r soudre le probl me ne lancez pas Windows et sup primez les pilotes de p riph riques coupables de votre fichier CONFIG SYS En revanche la version PC 80386 sait comment cohabiter avec les environnements gestionnaires de m moire aux standard VCPI ou DPMI C est vrai en partic ulier de Windows3 de Desqview et des gestionnaires de m moire QEMM
188. u dans la biblioth que La phase d dition de liens de camlc est assez intelligente pour supprimer le code correspondant des phrases inutilis es en particulier les d finitions de variables glob ales qui ne servent pas apr s leur d finition Donc il n y a aucun probl me mettre plusieurs modules m me des modules rarement utilis s en une seule biblioth que cela ne va pas augmenter la taille des ex cutables L appel camllibr se fait ainsi camllibr options fichier zo fichier zo 66 Manuel d utilisation du syst me Caml Light o fichier zo fichier zo sont les fichiers objets r unir L ordre dans lequel ces noms de fichiers apparaissent sur la ligne de commande est significatif les phrases compil es contenues dans la biblioth que vont tre ex cut es dans cet ordre On rappelle que c est une erreur de faire r f rence une variable globale qui n a pas encore t d finie 6 2 Options Les options suivantes peuvent appara tre sur la ligne de commande de camllibr files fichier de r ponses Traite les fichiers dont les noms sont list s dans le fichier fichier de r ponses comme si ces noms apparaissaient sur la ligne de commande Les noms de fichiers contenus dans fichier de r ponses sont s par s par des blancs espaces tabulations ou sauts de ligne Cette option permet de circonvenir de sottes limitations sur la longueur de la ligne de commande I r pertoire Ajout
189. ue neq_string string gt string gt bool value le_string string gt string gt bool value lt_string string gt string gt bool value ge_string string gt string gt bool value gt_string string gt string gt bool Fonctions de comparaison par ordre lexicographique entre chaines 112 La biblioth que standard du syst me Caml Light value compare_strings string gt string gt int Comparaison g n rale entre cha nes compare_strings s1 s2 renvoie 0 si s1 et s2 sont gales 2 si s1 est un pr fixe de s2 2 si s2 est un pr fixe de s1 sinon elle renvoie 1 si s1 est avant s2 dans l ordre lexicographique et 1 si s2 est avant s1 dans l ordre lexicographique value string_for_read string gt string Renvoie une copie de l argument avec les caract res sp ciaux repr sent s par des s quences d chappement en suivant les m mes conventions que Caml Light 9 17 vect op rations sur les tableaux value vect_length a vect gt int Renvoie la longueur nombre d l ments du tableau donn value vect_item a vect gt int gt a vect_item v n renvoie l l ment num ro n du tableau v Le premier l ment est l l ment num ro 0 Le dernier l ment a le num ro vect_length v 1 D clenche Invalid_argument vect_item si n est en dehors de l intervalle 0 vect_length v 1 On peut aussi crire v n au lieu de vect_item v n value vect_assign a vect gt
190. une option sans argument foo int 1 une option enti re avec argument 1 foo string foobar une option cha ne avec argument foobar foo float 12 34 une option flottante avec argument 12 34 foo 123 trois arguments anonymes 1 2 et 3 foo 1 flag 3 string bar un argument anonyme une option sans argument un argument anonyme une option cha ne avec argument bar type spec String of string gt unit Int of int gt unit Unit of unit gt unit Float of float gt unit Le type somme qui d crit le comportement associ un mot cl value parse string spec liste gt string gt unit gt unit parse speclist anonfun analyse la ligne de commande et appelle les fonc tions de speclist quand un mot cl est d tect et anonfun sur les arguments anonymes Les fonctions sont appel es dans l ordre d apparition des mots sur la ligne de commande Les chaines de la liste string spec list sont les mots cl s Ils doivent commencer par un sinon ils sont ignor s Pour que l utilisateur puisse donner des arguments anonymes qui commencent par un mettre par exemple String anonfun dans la liste speclist exception Bad of string Les fonctions de speclist ou anonfun peuvent d clencher Bad avec un message d erreur pour rejeter des arguments erron s 10 2 filename op rations sur les noms de fichiers value current_dir_name string Le nom conventionnel du r pertoire co
191. urant par exemple en Unix value concat string gt string gt string concat r p fich renvoie un nom de fichier qui d signe le fichier fich dans le r pertoire r p value is_absolute string gt bool Renvoie true si le nom de fichier est absolu ou commence par une r f rence explicite au r pertoire courant ou en Unix et false sinon La biblioth que d utilitaires 117 value check_suffix string gt string gt bool check_suffix nom suff renvoie true si le nom de fichier nom finit par le suffixe suff value chop_suffix string gt string gt string chop_suffix nom suff retire le suffixe suff du nom de fichier nom Le comporte ment n est pas sp cifi si nom ne se termine pas par le suffixe suff value basename string gt string value dirname string gt string Coupe un nom de fichier en un nom de r pertoire et un nom de base respective ment concat dirname nom basename nom renvoie un nom de fichier qui est quivalent nom De plus apr s avoir fix le r pertoire courant dirname nom l aide de sys__chdir les r f rences basename nom qui est un nom de fichier relatif d signent le m me fichier que nom avant l appel chdir 10 3 genlex un analyseur lexical g n rique Ce module fournit un analyseur lexical d usage g n ral sous la forme d une fonc tion transformant un flux de caract res en flux de lex mes Cet analyseur suit des convent
192. urn es par les appels successifs f e copy_string_array p alloue un tableau de cha nes copi es partir du pointeur vers un tableau de cha nes p un char 86 Manuel d utilisation du syst me Caml Light 8 4 5 D clenchement d exceptions Les fonctions C ne peuvent pas d clencher n importe quelle exception Cependant on fournit deux fonctions qui d clenchent deux exceptions standard e failwith s o s est une cha ne C termin e par un caract re nul de type char d clenche l exception Failure avec pour argument s e invalid_argument s o s est une cha ne C termin e par un caract re nul de type char d clenche l exception Invalid_argument avec pour argument s 8 5 Vivre en harmonie avec le r cup rateur de m moire Les blocs inutilis s du tas sont automatiquement r cup r s par le r cup rateur de m moire Cela demande un peu de coop ration de la part du code C qui manipule les blocs allou s dans le tas Voici trois r gles de base qu il doit respecter R gle 1 Apr s l allocation d un bloc structur un bloc avec marqueur inf rieur No_scan_tag tous les champs de ce bloc doivent tre remplis avec des valeurs bien form es avant la prochaine op ration d allocation Si le bloc a t allou avec alloc ou alloc_tuple le remplissage a lieu par affectation directe aux champs du bloc Field v n Un Si le bloc a t allou avec alloc_shr le remplissage s op re par la
193. urs mani res diff rentes la d composition retenue est celle dont la premi re entit est la plus longue On peut ajouter des blancs pour forcer une autre d composition Ex 123 4 est lu comme l identificateur 123 suivi du mot cl et de l entier litt ral 4 et non pas comme l identificateur f suivi du flottant litt ral 123 4 f 123 4 est lu comme l identificateur f suivi du flottant litt ral 123 4 1 2 Les noms globaux Les noms globaux sont utilis s pour d signer quatre familles d objets du langage e des valeurs li es un nom global aussi appel es valeurs globales e des constructeurs de valeurs constants et non constants e des constructeurs de types e des noms de champs d enregistrement aussi appel s tiquettes Un nom global se compose de deux parties le nom du module qui le d finit et le nom local l int rieur de ce module Les deux parties d un nom global doivent tre des identificateurs l gaux une lettre suivie de lettres chiffres soulign s et apostrophes D finition du langage Caml 9 1 2 1 Syntaxe des noms globaux Le langage fournit deux syntaxes pour faire r f rence un nom global nom global ident ident __ ident La forme ident __ ident2 est appel e nom complet ou encore nom qualifi Le premier identificateur est le nom du module d finissant le nom global le second est le nom local l int rieur de ce module La version ident est appel
194. ussit t Pour sp cifier les v nements attendus value wait_next_event event list gt status Attend l av nement de l un des v nements sp cifi s dans la liste d v nements donn e et renvoie le statut de la souris et du clavier ce moment Si Poll est donn dans la liste d v nements revient imm diatement avec le statut courant Poll signifie sonder d o l id e de donner un simple coup de sonde si cet v nement est attendu Si le curseur de la souris est hors de la fen tre graphique les champs mouse_x et mouse_y de l v nement sont en dehors de l intervalle 0 size_x 1 0 size_y 1 Les caract res tap s sont m moris s dans un tampon et restitu s un par un quand l v nement Key_pressed est sp cifi Sonder la souris et le clavier value mouse_pos unit gt int int Renvoie la position du curseur de la souris relative la fen tre graphique Si le curseur de la souris est hors de la fen tre graphique mouse_pos renvoie un point en dehors de l intervalle 0 size_x 1 0 size_y 1 value button_down unit gt bool Renvoie true si le bouton de la souris est enfonc false sinon value read_key unit gt char Attend qu une touche soit enfonc e et renvoie le caract re correspondant Les caract res tap s en avance sont conserv s dans un tampon value key_pressed unit gt bool Renvoie true si un caract re est disponible dans le tampon d entr e de
195. ux d signent des valeurs globales des constructeurs de valeurs constants des constructeurs de valeurs non constants des constructeurs de type ou des noms de champs d enregistrement aussi appel s tiquettes Pour les noms de valeurs et les constructeurs de valeurs des noms sp ciaux construits avec le mot cl prefix et un nom d op rateur sont aussi admis Les lex mes et sont reconnus comme des constructeurs constants pr d finis la liste vide et la valeur rien Il ny a pas de distinction syntaxique entre les noms globaux repr sentant des valeurs des constructeurs et des tiquettes Dans le cas des tiquettes et des construc teurs de types la syntaxe du langage les autorise uniquement dans des contextes o aucune autre esp ce de noms globaux ne peut appara tre Il n y a donc pas d ambiguit donner le m me nom global une tiquette un constructeur de type et une valeur globale ou un constructeur de valeurs Autrement dit le langage fournit un espace de noms pour les tiquettes un autre espace de noms pour les constructeurs de types et un troisi me espace de noms pour les valeurs et constructeurs de valeurs Les constructeurs de valeurs et les valeurs globales partagent le m me espace de noms Un nom global en position de valeur est interpr t comme un constructeur de valeurs s il appara t dans la port e d une d finition de type qui d finit ce constructeur sinon le nom global est interpr
196. ve son omission quivaut else Ex if x mod 2 0 then pair else impair s value en pair si la valeur de x est divisible par 2 en impair sinon if x gt 0 then f x applique f ax si x est strictement positif et renvoie sinon D finition du langage Caml 23 1 7 9 Conditionnelle par cas L expression match expr with motif gt expr motif gt expr filtre la valeur de expr par les motifs motif motif Si le filtrage par motif r ussit Vexpression associ e expr est valu e et sa valeur renvoy e comme valeur de l expression match tout enti re L valuation de expr a lieu dans un environnement enrichi par les liaisons effectu es pendant le filtrage Si plusieurs motifs filtrent la valeur de expr le motif qui appara t le premier dans l expression match est s lectionn Si aucun motif ne filtre la valeur de expr l exception Match_failure est d clench e L expression match ci dessus se comporte exactement comme l application de fonction function motif gt expr motif gt expr expr Ex match x with t r gt r _ gt s value en la liste x priv e de son premier l ment si x est non vide ou bien la liste vide si x est vide match x with t r gt reste s value en la liste x priv e de son premier l ment si x est non vide et d clenche l exception Match_failure si x est vide 1 7 10 Op rateurs bool ens L expression expr amp expr s
197. vect gt b vect map_vect f v applique la fonction f tous les l ments de v et construit un tableau contenant les r sultats retourn s par f I f v 0 f v 1 f v vect_length v 1 value map_vect_list a gt b gt a vect gt b list map_vect_list f v applique la fonction f tous les l ments de v et construit une liste contenant les r sultats retourn s par f v 0 f v 1 f v vect_length v 1 value do_vect a gt b gt a vect gt unit do_vect f v applique tour tour la fonction f tous les l ments de v ignorant tous les r sultats f v 0 f v 1 f v vect_ length v 1 O 10 La biblioth que d utilitaires Ce chapitre d crit les modules de la biblioth que d utilitaires de Caml Light Comme les modules de la biblioth que de base les modules de la biblioth que d utilitaires sont automatiquement li s avec les fichiers de code compil de l utilisateur par la commande camlc Les fonctions d finies par cette biblioth que sont donc utilisables dans les pro grammes ind pendants sans que l on ait ajouter aucun fichier zo sur la ligne de commande de la phase d dition de liens De la m me fa on en utilisation interactive ces globaux sont utilisables dans toutes les phrases entr es par l utilisateur sans que l on ait charger aucun fichier de code au pr alable Au contraire des modules de la biblioth que de base l
198. voie une nouvelle chaine de longueur n La chaine contient initialement des caract res arbitraires value make_string int gt char gt string make_string n c renvoie une nouvelle cha ne de longueur n remplie avec le caract re c value fill _ string string gt int gt int gt char gt unit fill_ string s debut long c modifie physiquement la cha ne s en rempla ant les caract res num ro debut debut long 1 par c D clenche Invalid_argument fill_string si debut et long ne d signent pas une sous chaine valide de s value blit_string string gt int gt string gt int gt int gt unit blit_string si o1 s2 02 long copie long caract res de la cha ne s1 partir du caract re num ro o1 dans la cha ne s2 partir du caract re num ro o2 Cette fonction marche correctement m me si s1 et s2 d signent la m me cha ne et que les sous cha nes source et destination se recouvrent D clenche Invalid_argument blit_string si o1 et long ne d signent pas une sous cha ne valide de s1 ou si o2 et long ne d signent pas une sous cha ne valide de s2 value replace_string string gt string gt int gt unit replace_string dest src debut copie tous les caract res de la cha ne src dans la cha ne dest partir du caract re num ro debut de dest D clenche Invalid_argument replace_string si la copie ne tient pas dans la cha ne dest value eq_string string gt string gt bool val
199. xpr motif gt expr motif gt expr motif expr variable motif expr peat fd mod 7 7 e lt gt lt lt gt lt s lt lt gt lt La table suivante indique les priorit s relatives et l associativit des op rateurs et des constructions d expressions qui ne sont pas ferm es Les constructions qui ont la plus grande priorit viennent en t te D finition du langage Caml 19 Construction ou op rateur Associativit I application de fonction droite application de constructeur pr fixe mod a gauche Ok 4 a gauche c oa gauche droite droite comparaisons lt etc gauche not amp gauche or gauche lt droite if droite let match fun function try 1 7 1 Constantes Les expressions r duites une constante s valuent en cette constante 1 7 2 Noms Les expressions r duites un nom s valuent la valeur li e ce nom dans l environnement d valuation courant Le nom peut tre un nom complet ident __ ident ou un nom abr g ident Un nom complet repr sente toujours une valeur globale Un nom abr g repr sente ou bien un identificateur li localement par une construction let function fun match try ou for ou bien une valeur globale dont le nom complet est obtenu en compl tant le nom abr g par la m thode d crite
200. y_input can tamp index longueur lit longueur caract res sur le canal can et les copie dans la cha ne tamp partir du caract re num ro index Contrairement input really_input fait plusieurs tentatives de lecture si n cessaire pour lire exactement le nombre de caract res demand s D clenche End_of_file si la fin du fichier est atteinte avant que longueur caract res ne soient lus D clenche Invalid_argument really_input si index et longueur ne d signent pas une sous cha ne valide de tamp value input_byte in_channel gt int Analogue input_char mais renvoie l entier sur huit bits qui repr sente le car act re lu D clenche End_of_file si la fin du fichier est atteinte value input_binary_int in_channel gt int Lit un entier cod en repr sentation binaire sur le canal d entr e donn Voir la fonction output_binary_int page 103 D clenche End_of_file si la fin du fichier est atteinte pendant la lecture de l entier value input_value in_channel gt a Lit la repr sentation d une valeur structur e produite par output_value et ren voie la valeur correspondante D clenche End_of_file si la fin du fichier est atteinte D clenche Failure avec un message descriptif si les caract res lus dans le fichier ne repr sentent pas une valeur structur e Ce m canisme n est pas typ de mani re s re Le type de l objet retourn n est pas a proprement parler L objet retourn poss de
201. ype exn Le type des valeurs exceptionnelles type bool false true Le type des valeurs bool ennes type a vect Le type des tableaux dont les l ments sont de type a type unit Le type de la valeur rien type a list prefix of a a list Le type des listes exception Match_failure of string int int L exception d clench e quand un filtrage choue L argument du constructeur indique la position dans le texte source du filtrage qui a chou nom du fichier source position du premier caract re du filtrage position du dernier caract re du filtrage 9 3 char op rations sur les caract res value int_of_char char gt int Renvoie le code ASCII de son argument value char_of_int int gt char Renvoie le caract re de code ASCII donn D clenche Invalid_argument char_of_int si l argument est en dehors de l intervalle 0 255 La biblioth que de base 95 value char_for_read char gt string Renvoie une cha ne repr sentant le caract re donn avec les caract res sp ciaux cod s par des s quences d chappement suivant les m mes conventions que Caml Light 9 4 eq fonctions d galit value prefix a gt a gt bool ei e2 teste l galit structurelle de e1 et e2 Les structures mutables par exemple les r f rences sont gales si et seulement si leurs contenus courants sont structurellement gaux m me si les deux objets mutables ne son

Download Pdf Manuals

image

Related Search

Related Contents

Bombas de Calor Reversibles Aire-Agua  User`s Manual  the Prowarm™ Multi Circuit Water Kit user manual  Ⅲ「表示・広告」に関する相談の概要  Руководство по эксплуатации - rems-shop.ru  Philips AEM120BLU  

Copyright © All rights reserved.
Failed to retrieve file