Les macros les plus simples effectuent un simple calcul : par exemple, on peut faire une macro qui additionne deux nombres, mais ce serait relativement stupide puisque le signe + le fait bien plus rapidement.
Nous allons faire une macro qui permet de calculer la
factorielle d'un nombre, grâce à une boucle.
Voici comment on définit une macro :
Code : Autre1
2
3
| #macro factorielle(n)
#end |
On a ainsi définit une macro du nom de
factorielle, qui prend comme unique paramètre
n. Le
#end permet d'indiquer que l'on a finit de définir la macro.
Tout le code utilisé pour calculer la factorielle de
n sera donc située entre le
#macro et le
#end.
Le reste est surtout mathématiques, donc je ne m'attarderai pas dessus :
Code : Autre1
2
3
4
5
6
7
8
9
| #macro factorielle(n)
#local i = n;
#local resultat = 1;
#while (i > 1)
#local resultat = resultat * i;
#local i = i-1;
#end
resultat
#end |
Une chose devrait vous étonner : dans toute cette macro, on n'a jamais utilisé
#declare, mais
#local. Leur rôle est le même : donner une valeur à une variable.
Dans ce cas, pourquoi ne pas utiliser #declare ? Tu veux nous embrouiller ??
Attention ! J'ai dit qu'ils avaient le même rôle, mais pas le même effet !
#local permet d'utiliser des variables qui n'existeront que dans la macro en cours. De cette façon, on ne risque pas d'empiéter sur d'autres variables, en particuliers des variables d'autres macros...
A part cette différence,
#local et
#declare s'utilisent exactement de la même manière. Rien de bien compliqué, donc : il faut juste faire attention à les utiliser au bons endroits (dans une macro pour
#local, et partout ailleurs pour
#declare).
On a mit
resultat tout seul à la fin de la macro, ce qui veut dire que, lorsque l'on utilisera la macro, le résultat sera simplement mit à la place. Par exemple, pour faire une sphère de rayon 3! (3! = factorielle(3) = 6) :
Code : Autre1
2
3
4
| sphere {
<0,0,0>
factorielle(3)
} |
Difficile de faire plus simple !
