Jean-Jacques Lévy
jean-jacques.levy@inria.fr
19 janvier 1998
Les modules de bibliothéques - int.mli
(* Operations on integers *)
(* Integers are 31 bits wide (or 63 bits on 64-bit processors).
All operations are taken modulo $2^{31}$ (or $2^{63}$).
They do not fail on overflow. *)
exception Division_by_zero;;
value minus : int -> int = 1 "~int"
and minus_int : int -> int = 1 "~int"
(* Unary negation. You can write [-e] instead of [minus e]. *)
and succ : int -> int = 1 "succ"
(* [succ x] is [x+1]. *)
and pred : int -> int = 1 "pred"
(* [pred x] is [x-1]. *)
and prefix + : int -> int -> int = 2 "+int"
...;;
Les modules de bibliothéques - int.mli (2)
value string_of_int : int -> string (* Convert the given integer to its decimal representation. *) and int_of_string : string -> int = 1 "int_of_string" (* Convert the given string to an integer, in decimal (by default) or in hexadecimal, octal or binary if the string begins with [0x], [0o] or [0b]. Raise [Failure "int_of_string"] if the given string is not a valid representation of an integer. *)
Les modules de bibliothéques - string.mli
s.[n]
est le n+1ème caractère de s
s.[n] <- c
positionne ce caractère
Ce qui peut être trouvé dans l'interface string.mli
.
value string_length : string -> int;; value nth_char : string -> int -> char (* [nth_char s n] returns character number [n] in string [s]. The first character is character number 0. The last character is character number [string_length s - 1]. Raise [Invalid_argument "nth_char"] if [n] is ouside the range 0 to [(string_length s - 1)]. You can also write [s.[n]] instead of [nth_char s n]. *) and set_nth_char : string -> int -> char -> unit (* [set_nth_char s n c] modifies string [s] in place, replacing the character number [n] by [c]. Raise [Invalid_argument "set_nth_char"] if [n] is ouside the range 0 to [(string_length s - 1)]. You can also write [s.[n] <- c] instead of [set_nth_char s n c]. *) ;;
Les modules de bibliothéques - string.mli (2)
Et aussi plus succinctement:
value prefix ^ : string -> string -> string and sub_string : string -> int -> int -> string;; value create_string : int -> string and make_string : int -> char -> string;; value fill_string : string -> int -> int -> char -> unit and blit_string : string -> int -> string -> int -> int -> unit and replace_string : string -> string -> int -> unit;; value eq_string : string -> string -> bool = 2 "=string" and neq_string : string -> string -> bool = 2 "<>string" and le_string : string -> string -> bool = 2 "<=string" and lt_string : string -> string -> bool = 2 "<string" and ge_string : string -> string -> bool = 2 ">=string" and gt_string : string -> string -> bool = 2 ">string";; value compare_strings : string -> string -> int = 2 "compare_strings";; value string_for_read : string -> string;;
Entrées/Sorties tamponnées - io.mli
type in_channel and out_channel;; exception End_of_file;; value stdin: in_channel and stdout: out_channel;; value exit : int -> 'a;; value print_char : char -> unit and print_string : string -> unit and print_int : int -> unit and print_float : float -> unit and print_endline : string -> unit and print_newline : unit -> unit;; value read_line : unit -> string and read_int : unit -> int and read_float : unit -> float;;
Entrées/Sorties tamponnées - io.mli (2)
value open_out : string -> out_channel and flush : out_channel -> unit and output_char : out_channel -> char -> unit and output_string : out_channel -> string -> unit and output : out_channel -> string -> int -> int -> unit and seek_out : out_channel -> int -> unit and pos_out : out_channel -> int and close_out : out_channel -> unit;; value open_in : string -> in_channel and input_char : in_channel -> char and input_line : in_channel -> string and input : in_channel -> string -> int -> int -> int and seek_in : in_channel -> int -> unit and pos_in : in_channel -> int and close_in : in_channel -> unit;;
Où trouver les modules de bibliothèques
En Unix, on peut lire sous Emacs tous les .mli
en
/usr/local/lib/caml-light
Sur Mac ou Pc, dans le répertoire lib
de la distribution
Caml-light.
Sur le Web, on les trouve en:
http://pauillac.inria.fr/caml/man-caml/
aussi à l'X en:
Compilation séparée
2 types de noms d'identificateur:
nommage absolu: graphics__moveto, graphics__lineto,
etc
nommage relatif: moveto, lineto
après avoir fait #open "graphics"
Le top-level interactif est dans un module top implicite.
Pour charger un module, on fait load "x.ml", ou load_object "x.zo".
Les interfaces de module doivent être compilés (format .zi). L'interface d'un module est implicitement importé par le nommage absolu (contenant le nom du module) ou par la directive #open.
Compilation séparée (2)
Les suffixes .zo désignent des fichiers compilés d'implémentation.
La compilation génère des fichiers .zo ou .zi à partir de .ml ou .mli. Si pas de .mli, un .zi est automatiquement généré en faisant un interface standard. La compilation de .mli, puis de .ml permet de vérifier l'adéquation de l'interface par rapport à l'implémentation.