next up previous contents index
Next: Ce qu'il faut retenir Up: Premiers pas éclairés... Previous: Quotation, symboles et objets   Contents   Index

Subsections

Formes spéciales

La forme define

Nous nous sommes aperçus de l'impossibilité de définir un symbole comme étant un symbole avec l'écriture :

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

Cela est du au fait que Scheme évalue un-autre-nom, et comme il n'est pas défini, une erreur se produit. Pour remédier à ce problème, nous avons quoté le symbole afin de ne pas l'évaluer.

Mais si Scheme est en ordre applicatif (il évalue tous les arguments avant l'appel effectif à la fonction) et si l'évaluation de un-autre-nom provoque une erreur, pourquoi l'évaluation de un-nom ne provoque pas d'erreur dans :

Osm> (define un-nom (+ 1 2 3))
  => #unspecified

C'est parce que define n'est pas une fonction, mais une forme spéciale. Dans l'écriture précédente, elle reçoit en fait un symbole et une expression. Cette expression est évaluée et le résultat est associé au symbole.


La forme set!

Il existe une autre forme spéciale similaire : il s'agit de set! qui permet de modifier la valeur associée à un symbole :

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

Osm> un-nom
  => 123

Osm> (set! un-nom 456)
  => #unspecified

Osm> un-nom
  => 456

C'est une forme spéciale pour les mêmes raisons que define en est une ; il ne faut pas évaluer le premier argument au préalable, mais bien donner à la forme spéciale set! un symbole.


La forme if

Nous connaissons aussi une autre forme spéciale. Les lecteurs qui ont écrit les exemples proposés dans le chapitre précédent s'en sont aperçus : if est aussi une forme spéciale. Le if évalue en premier la condition, et en fonction du résultat de cette évaluation, il évalue l'une ou l'autre de ses clauses. Si le if était une fonction classique, l'écriture des fonctions récursives seraient impossible, comme nous le verrons dans un prochain chapitre.


next up previous contents index
Next: Ce qu'il faut retenir Up: Premiers pas éclairés... Previous: Quotation, symboles et objets   Contents   Index
© 1993 to 2001 Erian Concept