2017-01-12 3 views
1

Je suis nouveau dans cette langue, mais je ne comprends pas ce que signifie cette instruction en postscript.
Je connais assez bien la notation polonaise, mais cette instruction n'a toujours aucun sens pour moi.Que signifie cette instruction en postscript?

/doStartGroupFile where { pop doStartGroupFile } if

quelqu'un peut me aider?
Merci d'avance.

Répondre

6

Ce n'est pas trop dur. L'opérateur where est décrit à la page 718 du manuel PostScript Language Reference Manual. Il prend un seul paramètre, la «clé» de la pile et recherche tous les dictionnaires courants sur la pile du dictionnaire (en commençant par le dictionnaire le plus haut, ou le dictionnaire actuel) pour un dictionnaire qui contient cette clé. S'il trouve un dictionnaire contenant cette clé, il pousse une référence au dictionnaire de la pile d'opérandes, puis il pousse un booléen "vrai" dans la pile d'opérandes.

S'il ne trouve pas de dictionnaire contenant la clé, il pousse une valeur booléenne 'false' sur la pile d'opérandes.

Alors /doStartGroupFile where recherche l'existence d'un dictionnaire contenant la clé «/doStartGroupFile »

L'élément suivant (de « { » à « } ») est un tableau exécutable, donc nous rassemblons tout cela et mettre sur la pile d'opérandes.

Ainsi, en fonction du résultat de la « où l'opérateur la pile d'opérande soit contenir:

{} vrai -dict-

Ou:

{ } false

Suivant p est l'opérateur if, vous pouvez le trouver à la page 607 du PLRM. L'opérateur if consomme deux opérandes de la pile d'opérandes, une procédure et un booléen.

Si le booléen est vrai, alors il exécute la procédure, s'il est faux, il le supprime simplement. Donc, si 'doStartGroupFile' a été trouvé, nous exécutons la procédure, si ce n'est pas le cas, nous l'ignorons. En supposant qu'il a été trouvé la pile d'opérandes pendant que nous exécutons la procédure contiendra simplement la référence au dictionnaire où nous avons trouvé doStartGroupFile.

La procédure est déclarée comme {pop doStartGroupFile}, et cela supprime d'abord l'élément supérieur de la pile d'opérandes (de sorte qu'il ignore la référence au dictionnaire), puis résout doStartGroupFile. Aucune idée de ce que faitStartGroupFile, mais je suppose que c'est une procédure exécutable définie ailleurs. Donc, en résumé, le fragment de code recherche une définition de 'doStartGroupFile', s'il en trouve une, il l'exécute, sinon il ne fait rien.

Simples :-)

+0

Merci Kens! –