[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Top] [Table des matières] [Index] [ ? ]

1.3.7.1 Un exemple d'une description de fonction

Dans une description de fonction, le nom de la fonction étant décrite apparaît d'abord. Il est suivi sur la même ligne d'une liste de noms d'argument. Ces noms sont également employés dans le corps de la description, pour représenter les valeurs des arguments.

L'apparition du mot-clé &optional dans la liste d'argument indique que les arguments suivants peuvent être omis (les arguments omis se transfèrent comme nil). Ne pas écrire &optional quand vous appelez la fonction.

Le mot-clé &rest (qui doit être suivi d'un nom d'argument simple) indique qu'un certain nombre d'arguments va suivre. Le nom d'argument simple suivant &rest recevra, comme valeur, une liste de tous arguments restants à passer à la fonction. Ne pas écrire &rest quand vous appelez la fonction.

Voici une description de fonction imaginaire foo:

Function: foo integer1 &optional integer2 &rest integers

La fonction foo soustrait integer1 de integer2, puis ajoute tout reste des arguments au résultat. Si integer2 n'est pas fourni, alors le numéro 19 est appliqué par défaut.

 
(foo 1 5 3 9)
     ⇒ 16
(foo 5)
     ⇒ 14

More generally,

 
(foo w x y…)
≡
(+ (- x w) y…)

Tout argument dont le nom contient le nom d'un type (par exemple, integer, integer1 ou buffer) est prévu pour être de ce type. Un pluriel d'un type (tel que buffers) signifie souvent une liste d'objets de ce type. Les arguments appelés object peuvent être de n'importe quel type. (@xref{Lisp Data Types}, pour une liste des types d'objet d'Emacs.) Des arguments avec d'autres sortes de noms (par exemple, new-file) sont discutés spécialement dans la description de la fonction. Dans quelques sections, des dispositifs communs aux arguments de plusieurs fonctions sont décrits du commencement.

Voir la section Lambda Expressions, pour une description plus complète des arguments optionnels et restants.

Commande, macro, et descriptions de formulaire spécial ont le même format, mais le mot `Function' est remplacé par `Command', `Macro', ou `Special Form', respectivement. Les commandes sont simplement des fonctions qui peuvent s'appeler interactivement; les macros traitent leurs arguments différemment des fonctions (les arguments ne sont pas évalués), mais sont présentés la même manière.

Les descriptions de formulaire spécial emploient une notation plus complexe pour indiquer des arguments facultatifs et répétés parce qu'elles peuvent démonter la liste d'argument en arguments séparés de manières plus compliquées. ‘[optional-arg]’ signifie que optional-arg est facultatif et ‘reapeated-args’ représente zéro arguments ou plus. Des parenthèses sont employées quand plusieurs arguments sont groupés dans les niveaux additionnels de la structure de liste. Voici un exemple :

Special Form: count-loop (var [from to [inc]]) body

Ce formulaire spécial imaginaire met en application une boucle qui exécute la forme body et qui ensuite incrémente la variable var à chacun itération. Sur la première itération, la variable a la valeur from ; sur des itérations suivantes, elle est incrémentée de un (ou par inc si elle est donnée). La boucle est arrêtée avant l'exécution de body si var est égale à to. Voici un exemple :

 
(count-loop (i 0 10)
  (prin1 i) (princ " ")
  (prin1 (aref vector i))
  (terpri))

Si from et to sont omis, var est lié à nil avant que la boucle commence, et la boucle est arrêtée si var est non-nil au début d'une itération. Voici un exemple :

 
(count-loop (done)
  (if (pending)
      (fixit)
    (setq done t)))

Sous ce formulaire spécial, les arguments from et to sont facultatif, mais il faut qu'ils soient tous deux présents ou tous deux absents. S'ils sont présents, inc peut aussi bien être indiqué optionnellement. Ces arguments sont groupés avec l'argument var dans une liste, pour les distinguer de body, qui inclut tous les éléments restants de la forme.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Top] [Table des matières] [Index] [ ? ]

Ce document a été généré par Eric Reinbold le 13 Octobre 2007 en utilisant texi2html 1.78.