![]()
![]()
![]()
![]()
![]()
Next: Formes spéciales Up: Premiers pas éclairés... Previous: Structures de contrôle   Contents   Index
Quotation, symboles et objets primitifsLes 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 unboundedEssayons encore :
Osm> (define un-autre-nom 123) => #unspecified Osm> (define un-nom un-autre-nom) => #unspecified Osm> un-nom => 123Nous 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-nomLa 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) => #tAttention, 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) => 6Mais 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) => 3ou bien :
Osm> (+ 1 3) => 3
![]()
![]()
![]()
![]()
![]()
Next: Formes spéciales Up: Premiers pas éclairés... Previous: Structures de contrôle   Contents   Index © 1993 to 2001 Erian Concept