Pour définir une prodédure, il suffit d'associer un littéral à un
exécutable. Par exemple, la définition d'un point par le code |/A {1
2} def| définit une procédure nommée $A$, procédure dont l'action est
de déposer les nombres $1$ et $2$ sur la pile d'opérandes.
Une procédure peut être tout simplement constituée d'une liste de
commandes. Par exemple, la définition de la commande
|tracerepere| est
$$
\vbox {\hsize = 80mm
\begintt
/tracerepere {
traceaxes
unites
axesarrow
ticks
subticks
} def
\endtt
}
$$
Dans une procédure, on peut utiliser des variables, qui resteront
locales pour peu que l'on prenne la peine d'utiliser un
dictionnaire. Par exemple, la procédure |addc| (addition de deux
nombres complexes) est définie comme suit~:
$$
\vbox {\hsize = 80mm
\begintt
/addc {
4 dict begin
/b' exch def
/a' exch def
/b exch def
/a exch def
a a' add
b b' add
end
} def
\endtt
}
$$
On commence par ouvrir un dictionnaire pour les 4~variables $a$, $b$,
$a'$ et $b'$, on récupère les données sur la pile pour les affecter à
ces variables, puis on effectue les calculs et on dépose les résultats
sur la pile. Pour finir, on jette le dictionnaire (par |end|), ce qui
a pour effet de nettoyer la mémoire de ces quatres variables. Si une
de ces variables était définie avant l'ouverture du dictionnaire, elle
retrouve son existence et sa valeur à la fermeture dusdit
dictionnaire.
Pour des procédures plus élaborées, l'interpréteur postscript fournit
toutes les structures de controle classiques, dont voici un bref
résumé, extrait du manuel de référence postscript~:
\syntaxe
\longref
{$any$}
{exec}
{$-$}
{exécute un objet arbitraire}
\longref
{$bool$ $proc$}
{if}
{$-$}
{exécute $proc$ si $bool$ est $true$}
\longref
{$bool$ $proc_1$ $proc_2$}
{ifelse}
{$-$}
{exécute $proc_1$ si $bool$ est $true$, $proc_2$ si $bool$ est
$false$}
\longref
{$int$ $proc$}
{repeat}
{$-$}
{exécute $proc$ $int$ fois}
\longref
{$proc$}
{loop}
{$-$}
{exécute $proc$ un nombre indéfini de fois}
\endsyntaxe
Voir les annexes pour un listing complet des opérateurs postscript
disponibles.

—
Syracuse — Dernière modification : 22 juin 2004 (0.08s - 3637241 - 14 octobre 2008)