Dans le langage courant, par exemple en français, on exprime une idée à l'aide d'une phrase ou d'une expression. Une phrase est construite à partir de mots, eux même construits à partir des lettres de l'alphabet. Pour bien se comprendre on ne construit pas ces phrases n'importe comment, on suit un ensemble de règles qu'on appelle la syntaxe ou la grammaire.
Dans un langage informatique, il en va de même : pour ``dialoguer'' avec un ordinateur on forme des expressions à partir de mots (qu'on appelle aussi symboles ou expressions atomiques) construits à partir d'un alphabet. Et pour être ``interprétées'' par l'ordinateur ces expressions doivent suivre une syntaxe rigoureuse.
Différentes représentations d'une expressions
Exemples d'expressions du langages des mathématiques :
Représentation sous forme d'arbre :
Écriture préfixée : on écrit le symbole d'une fonction devant ses arguments.
Écriture postfixée : on écrit le symbole d'une fonction après ses arguments.
L'écriture usuelle des expressions mathématiques combine l'écriture préfixée pour la plupart des fonctions (par exemple , l'écriture postfixée pour certaines fonctions (par exemple x2, n!), et l'écriture infixée pour les opérateurs (+, -, *, /).
La syntaxe de Scheme est très simple et permet d'aborder la programmation très rapidement.
Scheme est un langage interprété. L'interprète évalue au fur et à mesure les expressions que le programmeur écrit.
Nous appelons expression tout ce que nous manipulons en Scheme, c'est à dire tous ce qu'on demande d'évaluer à l'interprète ainsi que tous les résultats que renvoie ce dernier.
Il existe deux types d'expressions en Scheme : les expressions atomiques et les expressions composées.
Les nombres : entiers, réels, rationnelles, complexes.
Les booléens : ils s'écrivent #t
pour vrai et #f
pour faux.
Les chaînes de caractères : elles commencent et finissent par des double-quotes ".
Ex : "toto"
, "une autre chaine"
Les symboles : ce sont des noms contenant des lettres, des chiffres ou des signes comme +, -, !, ?, _, mais pas d'espace.
Ex : toto
, a12
, to+to
(+ 34 67) (/ 567 45) (- 12) (cos 3.1416)
On peut voir une expression composée Scheme comme un appel de fonction.
Un appel de fonction doit toujours contenir autant d'arguments que l'arité de la fonction.
Les arguments d'une fonction peuvent être des expressions composées.
La notation préfixée autorise :
(+ 12 3 56 7 20)
2 * 3 + 12 - 6
s'écrit (+ (* 3 5) (- 12 6))
Cependant l'écriture préfixée n'est pas toujours très lisible :
(+ (* 3 (+ (* 2 4)(+ 3 5)))(+ (- 10 7) 6))c'est pourquoi on attachera un soin tout particulier à indenter les expressions :
(+ (* 3 (+ (* 2 4) (* 3 5))) (+ (- 10 7) 6))
L'interprète Scheme fonctionne selon le cycle suivant :
Ex :
> 12.345 > #t > "une chaine" 12.345 #t "une chaine"
Comme dans la plupart des langages de programmation, il est pratique de pouvoir définir des variables.
Définir une variable, c'est créer un lien, une association, entre un identificateur et une valeur. En Scheme, cette opération se fait par l'intermédiaire de la fonction prédéfinie define :
Ex :
> (define pi 3.1416) > (define deux (+ 1 1)) pi deux > pi > (* deux pi) 3.1416 6.2832
L'évaluation d'un symbole consiste simplement à rendre la valeur qui lui est associé. Par exemple, l'évaluation du symbole pi
rend 3.1416
car c'est la valeur qui lui a été associée lors de sa définition.
Si la variable que l'on veut évaluer n'existe pas, c'est à dire si on ne l'a pas défini au préalable une association entre le symbole représentant la variable et une valeur, alors l'interprète renvoie une erreur.
L'évaluation d'une expression composée, de la forme : (f a1 a2 ... an) se fait en deux étapes :
a1 ... an
dans un ordre non déterminé a priori
f
aux valeurs des arguments et rend le résultat.
Ex : Pour évaluer l'expression (* 2 3)
, l'interprète évalue d'abord les nombres 2 et 3 dont les évaluations sont 2 et 3, puis leur applique la fonction prédéfinie +
et rend 7.
Ex : Pour évaluer (+ (* 2 5) (* 3 4))
, l'interprète évalue d'abord les expressions (* 2 5) et (* 3 4) dont les résultats sont 10 et 12, puis il évalue l'expression (+ 10 12)
et rend 22.
L'interprète de Scheme évalue toute les expressions qu'on lui soumet. Or parfois, on aimerait pouvoir manipuler une expression et non pas sa valeur. On peut bloquer le mécanisme dévaluation en appliquant à une expression la fonction spéciale quote. Cette fonction se contente de renvoyer son argument sans l'évaluer. On dit alors que l'expression est ``quotée''.
Ex :
>pi > (quote pi) 3.1415 pi
Cette fonction est si souvent utilisée qu'il existe une notation abrégée : le caractère apostrophe qu'on appelle aussi le quote. Lors de l'évaluation, l'interprète remplace l'apostrophe par la fonction quote. Ainsi on aura :
> (+ 1 2) >(quote (+ 1 2)) >'(+ 1 2) 3 (+ 1 2) (+ 1 2) > toto >'toto >''toto erreur toto 'totoIl est inutile (mais cela ne produit pas d'erreur) de ``quoter'' une constante, c'est à dire : un nombre, un booléen ou une chaîne.