Premier contact
Un article de Mangue.org, l'encyclopéde libre.
Nous allons découvrir de manière progressive l'environnement de développement du Caml avec de nombreux exemples. Il est important que vous compreniez tout, si quelque chose vous échappe n'hésitez pas à poser vos questions sur le forum.
| Sommaire |
Types et valeurs
Vous allez découvrir au fil de nombreux exemples la manière dont fonctionne le système interactif Caml. Dans un premier temps nos exemples seront basés sur l'interprétation de nos programmes, c'est seulement à partir du cours 17 que nous verrons comment compiler nos programmes et les exécuter en dehors de l'environnement de développement.
Tout au long de ces cours je fais en sorte de réduire les explications au minimum et de favoriser l'apprentissage par l'exemple. Vous verrez beaucoup de bouts de programmes présentant à chaque fois de nouvelels notions. Si vous avez la moindre questions n'hésitez pas à la poser sur le forum il est important que vous compreniez au fur et à mesure. Garder vos questoins avec l'espoir de les résoudre plus tard n'est pas forcément une bonne solution.
Voici donc les premiers exemples de ce que vous pourrez voir en exécutant le Caml (exemples sous Windows) :
# 3 * 5 ;; - : int = 15 # 5 - 1 (* ceci est un commentaire *) ;; - : int = 4 # 2 + 3 * 5 ;; - : int = 17 # let a = 97 ;; a : int = 97 # a - 4 ;; - : int = 93 # a - 4 - true ;; Toplevel input: > a - 4 - true ;; > ^^^^ This expression has type bool, but is used with type int.
Le Caml affiche à chaque fois un prompt # entre chacune de vos requètes. Il procède ensuite par analyse syntaxique afin de déduire ce que vous désirez.
Chaque requète se termine par un ;; et est évaluée avant de renvoyer une résultat. Plusieurs cas sont à prendre en compte par la suite. Soit le Caml affiche un - ce qui indique que le résultat n'est mémorisé dans aucune constante, soit il affiche justement le nom de la constante en début de ligne (comme dans a : int = 97)
Toutes vos requètes fournissent un résultat, pour l'instant nous avons travaillé qu'avec des entiers (int donc), mais il existe d'autres types de données (float, bool, char, unit, etc.)
Chaque requète produit donc un résultat. Le Caml est un langage très fortement typé, ce qui implique que le type apparaîtra toujours explicitement à coté de la valeur correspondante.
Voici les types de base du langage Caml, ainsi que des exemples de valeurs qu'ils peuvent prendre ou... ne pas prendre :
| Type | Utilité | Exemples de valeurs | Valeurs n'appartenant pas à ce type |
|---|---|---|---|
| int | Calculs sur les nombres entiers | 0 97 -15 | 1.0 2.5 -1 |
| float | Calculs sur les nombres réels | 0.5 -.97.4 | 17 -2.5 0 |
| bool | Valeurs booléennes | false true | toutes les autres |
| char | Manipulation de caractères | `p` `d` | `fd` 'a' "a" |
| string | Chaînes de caractères | "chaine" "encore une" | `f` 'test' |
| unit | Type abstrait | () | toutes les autres |
Nous verrons au fur et à mesure quel est l'utilité de tous ces types et comment les manipuler avec les opérateurs et fonctions prédéfinis.
Le Caml étant un langage très fortement typé il est impossible de mélanger ces différents types dans nos opérations, il faudra utiliser des fonctions de transtypage.
Définitions globales
Dans l'exemple précédent vous avez vu la définition d'une constante par l'instruction let a = 97 ;;
Le Caml nous renvoyait la valeur de cette constante associée à son type et à son nom, en effet la réponse de Caml commençait par un a et pas par un - comme pour les autres requètes.
Celà indique tout simplement que la valeur correspondante a été mémorisée avec son type sous le nom a en mémoire. Il s'agit d'une définition globale puisque nous n'avons pas précisé le contraire. Celà signifie que nous pouvons utiliser cette constante dans les instructions suivantes.
Vous pouvez définir de cette façon autant de constantes que vous le souhaitez, mais si vous essayer de définir une constante sous le même nom qu'une constante déjà définie vous n'obtiendrez pas de message d'erreur. L'ancienne valeur (et l'ancien type) sera tout simplement remplacé par la nouvelle.
Dans l'exemple suivant vous verrez plusieurs définitions de constantes dans la même session :
# let a = 97 ;; a : int = 97 # let a = true and b = false ;; a : bool = true b : bool = false # let entier1 = 65 and entier2 = -43 and réel1 = 0.0 and réel2 = float_of_int(-69) ;; entier1 : int = 65 entier2 : int = -43 réel1 : float = 0.0 réel2 : float = -69.0
Comme vous le constatez il est possible de définir en une seule instruction plusieurs constantes. Nous voyons aussi une première utilisation de la fonction float_of_int. Il existe de nombreuses fonctions comme celle-ci permettant de passer d'un type à l'autre, nous les verrons en détail dans le cours suivant.
| Astuce |
| Comme tout au long de ces cours, je vous donne le minimum d'indications en espérant que vous puissiez en déduire les concepts fondamentaux par vous même. Cependant n'oubliez jamais que si vous avez des questions le forum est là pour vous. |
Définitions locales
Il arrivera souvent dans vos programmes qu'il ne soit pas nécessaire de conserver la valeur d'une constante. Celle-ci peut être utilisée dans un calcul local où elle intervient plusieurs fois. Il est possible pour celà de définir localement une constante comme dans l'exemple suivant :
# let Pi_sur_4 = atan (1.0) in cos(Pi_sur_4 /. 4.0) -. sin (Pi_sur_4) ;; - : float = 0.273678499217 # Pi_sur_4 ;; Toplevel input: > Pi_sur_4 ;; > ^^^^^^^^ The value identifier Pi_sur_4 is unbound.
La constante Pi_sur_4 n'est donc connue que lors de l'évaluation de l'expression qui suit directement le mot clé in. Le Caml est incapable de nous restituer sa valeur dans la requète suivante puisqu'il ne l'a pas conservée en mémoire.
Il est possible d'imbriquer les définitions locales et globales. C'est à dire que vous pouvez définir localement des constantes afin de définir une constante globale comme dans l'exemple suivant :
# let x = 3 and y = a / 2 and z = 13 in 12 * x - x * a + y * z*x -3 ;; - : int = -2145 # let nombre = let x = 2 and y = 6 and z = -13 and t = 4 * a and carre_a = a * a in x + y + z - t / 5 + carre_a ;; nombre : int = 17524
Dans la suite de votre session les valeurs de x, y, z et t sont inconnues.
Le forum !
Je vous le rappelle encore une fois le forum est là pour toutes vos questions. Je suis concient que ça fait beaucoup de théorie à digérer pour un premier cours mais ne reculez pas si vite. Vous verrez que ce n'est pas si difficile.
N'ayez pas peur de poser des questions qui vous parraîssent débiles au premier abord. L'attitude à ne pas avoir est justement de garder vos questions.... Le forum est là pour vous aider à progresser :)
Dans les cours suivants la philosophie est la même, vous laisser découvrir par vous même les grandes lignes du langage en vous aidant biensûr ;) Vous avez certainement déjà compris que le Caml est un langage très axé mathématiques dans son ensemble. C'est la raison pour laquelle beaucoup des exemples, au moins dans les permiers cours, touchent à ce domaine ; mais nous verrons comment construire de vrais programmes avec ce langage.

