Supposons que le programmeur d'une application particulière soit très attaché à la boucle for du langage C. Il a donc envie d'écrire des expressions du type :
(for (setf i 0) (< i n) (incf i)
(setf (aref a i) 0))
Voici une macro permettant de le faire :
(defmacro for (start test update &body body)
`(progn ,start
(do ()
((not ,test))
,@body
,update)))
Une autre possibilité est de se servir de la macro while définie dans la section précédente :
(defmacro for (start test update &body body)
`(progn ,start
(while ,test
,@body
,update)))
Voici comment s'en servir :
* (for (setf *i* 0) (< *i* 5) (incf *i*)
(print *i*))
0
1
2
3
4
NIL
*
Attention, l'indentation par défaut proposée par Emacs n'est pas celle indiquée dans l'exemple ci-dessus, car Emacs ne connaît pas l'existence de la macro for. Il convient alors d'apprendre à Emacs cette nouvelle indentation (voir Section 5.1). Pour la macro for, il y a trois expressions à indenter spécifiquement. Il faut donc mettre dans le fichier .emacs l'expression Emacs Lisp suivante :
(put 'for 'lisp-indent-function 3)
Dans le cadre de la création d'une application, il sera souvent nécessaire d'apprendre à Emacs l'indentation des macros correspondant aux idiomes de l'application.