Lisp at 4. L'opérateur d'affectation

Home
Up
Previous
Next

On a vu qu'il était possible d'associer une valeur à un symbole; cela peut se faire via l'opérateur d'affectation SETF. Supposons qu'aucune valeur ne soit encore affectée au symbole Vitesse :

Vitesse
=> erreur!

(SETF vitesse 60)
=> 60

Vitesse
=> 60

(SETF vitesse 100)
=> 100

Vitesse
=> 100

L'opérateur SETF a 2 particularités :

  1. Il n'évalue pas le premier argument, donc il ne respecte pas la règle générale d'évaluation d'une expression vue plus haut. SETF, comme QUOTE et DEFUN, l'opérateur de définition d'une fonction utilisateur, fait partie des opérateurs dits spéciaux : ceux-ci ont leurs propres règles d'évaluation. Parmi les primitives du Lisp (c'est-à-dire les opérateurs définis par la norme du langage), ces opérateurs spéciaux sont minoritaires. Bien entendu, les fonctions définies à l'aide de DEFUN respectent la règle générale d'évaluation.

  2. Après avoir renvoyé une valeur, l'opérateur SETF a un effet persistant en ce sens qu'il a associé de façon permanente une valeur à un symbole : c'est le principe de l'affectation; on dit aussi que SETF a un effet de bord. C'est une liberté qui est prise par rapport au modèle de calcul purement fonctionnel où les fonctions n'ont pas d'effet de bord (la majorité des fonctions Lisp n'ont pas d'effet de bord, ce qui implique qu'elles n'altèrent pas leurs arguments).

Home    Previous    Up    Next
contact
site map
Last update : 26/12/2001