next up previous contents index
Next: Formes spéciales Up: Premiers pas éclairés... Previous: Structures de contrôle   Contents   Index



Quotation, symboles et objets primitifs

Les symboles sont utilisés en Scheme pour associer un nom à une expression, ce qui nous permet d'utiliser le nom ailleurs.

Est-il possible de manipuler les noms en tant que tels, sans les associer à une valeur ? Essayons d'associer à un nom un autre nom :

Osm> (define un-nom un-autre-nom)
Error: symbol 'un-autre-nom' is unbounded

Essayons encore :

Osm> (define un-autre-nom 123)
  => #unspecified

Osm> (define un-nom un-autre-nom)
  => #unspecified

Osm> un-nom
  => 123

Nous n'avons pas réussi à manipuler un-autre-nom en tant que symbole. La seule chose que nous ayons fait est de donner une valeur à un-autre-nom pour pouvoir le manipuler sans erreur. Mais alors Scheme a considéré la valeur associée 123 au lieu du symbole lui-même : il a évalué un-autre-nom, et le résultat de cette évaluation est 123.

Pour empêcher cette évaluation, il faut utiliser la quotation qui interdit l'évaluation de Scheme :

Osm> (define un-nom 'un-autre-nom) 
  => #unspecified

Osm> un-nom
  => un-autre-nom

La quotation s'écrit en plaçant une apostrophe devant l'expression à quoter.

Cette fois-ci, nous avons réussi à associer à un-nom le symbole un-autre-nom. D'ailleurs, nous pouvons écrire :

Osm> (symbol? un-nom)
  => #t

Attention, dans cette écriture, ce n'est pas un-nom qui est un symbole, mais le résultat de son évaluation, qui retourne, nous l'avons vu, un-autre-nom.

Toutes les expressions de Scheme peuvent être quotées. Si nous écrivons :

Osm> (+ 1 2 3)
  => 6

Mais si nous utilisons la quotation, nous obtenons :

Osm> '(+ 1 2 3)
  => (+ 1 2 3)

c'est à dire la liste formée du symbole + et des entiers 1, 2 et 3. Nous avons trouvé un autre moyen de construire les listes !

La quotation joue en Scheme un rôle important car elle permet de construire des structures complexes, qui peuvent être exécutables, de manière très simple. Nous commençons à apercevoir la puissance expressive de Scheme, où les données et les programmes ont la même représentation, ce qui donne au langage une puissance expressive hors du commun.

Les objets primitifs, comme les caractères, les chaînes de caractères, les nombres et les booléens n'ont pas besoin d'être quotés pour être utilisés. Cela provient du fait qu'ils sont évalués en eux-mêmes. On peut par exemple écrire :

Osm> (+ '1 '3)
  => 3

ou bien :

Osm> (+ 1 3)
  => 3


next up previous contents index
Next: Formes spéciales Up: Premiers pas éclairés... Previous: Structures de contrôle   Contents   Index
© 1993 to 2001 Erian Concept