by Emre Demiralp About the author: ������˹̹���������޲���ѧԺ��һ��ѧ����ͬʱҲ����˹̹����������ѧ��ѧ����ϵ�����ʵ���ҵĹ���Ա֮һ����Щʵ���ҵ���������ϵͳ��LINUX����Ȥ: PovRay��PostScript��������CD��ƣ���̣�ȫϢ��Ӱ���ȵȡ�1994�����ΪLINUX�û��� Content: |
Abstract:
���߽�һ������ PostScripe �����еIJ�����ջ�����Ľ���ϸ�Ľ������������������Ķ��塢�����Ķ����Լ�Ñ���ͺ�Ķ��壬������ʾ����ϰ�⡣��һƪ���½�������Щϰ��Ĵ𰸡����ڶ�ջ�����Ľ��ܻ�û�н��������߽����Ժ���������������������ݡ�
������һϵ�й��� PostScript �����еĵ���ƪ�����ォ�������� PostScript �IJ�����ջ���ص�������������������Ķ��塢�����Ķ��弰Ñ���ͺ�Ķ����ϡ�������ͼ����dz�����������������⡣���л�����һЩ����˵���Ե�ʾ�������ڲ�����ջ���������ݽ���½���������Ժ�������С�
ǰ��ļ�ƪ�����ἰ������ջ�Ľṹ�Ϳ��Ըı���ṹ�IJ������������Ǹ����ڴ���������ջ�ο��������Ԫ��֮�⣬��������ڲ�����ջ�е�Ԫ�ض������εġ���������Ԫ�ر���������Ƿ�����marktype����ջ������ cleartomark �� counttomark ��ɾ������������������ջ�������Ԫ��֮������Ԫ�صġ��������ʣ���������ʵ�ּ򵥷��顣��Ȼ�ⲻ��Ψһ�ķ��鷽ʽ����ʹ�ô������ж��Ԫ�صĵ�ʵ���Ϊ���ܡ���ʵ�屻���������顱��PostScript �����еġ�����������������������������е�Ԫ�ء��������߽���������ÿ�����������������ʾ����
[���ڶ�ջ�д���һ����Ƿ�Ԫ�ء����������Ӧ�IJ����� ] û�и��������ͻ��� mark ���������ͬ�Ľ�ɫ�������ڲ�����ջ�����һ���ο���ǵ㣬�������������֮����������ջ������Ԫ�ض�������Ϊ�ǵ���Ԫ�ء�����IJ��������� [ �� mark ����֮��Ĺ�ϵ��
GS>[ pstack -marktype GS<1>2 3 mark pstack -marktype- 3 2 -marktype- GS<4>
]���˲�������Ӧ����һ�������� [����ʹ�ô˲�����֮ǰ����ջ������뺬��һ����Ƿ�Ԫ�ء�ʵ���ϣ��˲���������Ϊ������Ľ�����־�����������Ĵ��������ڽ�β�����Ӧ�ڿ�ͷ��PostScript �� ] ���������ջʱ�����������Ӧ�Ŀ�ʼ������ [����� [ �����ڣ�PostScript �����س�����Ϣ��ȡ���ò����������Ԫ�ؽ����� [ ���������ջ����ô������һ�������鲢��Ϊһ����ʵ�壨single entitiy�������ڲ�����ջ�У��ִ�ı�Ƿ�Ԫ�ؾ�ת��ɸ������һ���֣���˳�����һ����һ�����͵�Ԫ�أ����뿴�����ʾ����
GS>[ pstack -marktype- GS<1>] pstack [] GS<1>
���ϵIJ����󣬲�����ջ��ֻ����һ��Ԫ�ء��������顣һ���ǿ���������� [ �� ] ֮����������Ԫ����ֱ�Ӵ������ڴ���ʱ������Щ���� [��] ������Ԫ�ض�Ҫͬʱ���롣ʾ�����£�
GS>[ 1 2 3 ] pstack [1 2 3] GS<1>
�Զ��׼������鱻������һ����ʵ������������ջ�С�
���ǻ����Դ���һ��ָ����Ԫ�ظ�������ָ��ÿ��Ԫ�����ݵ����顣�������ʾ��������һ���������� null Ԫ�ص����飬���� null ����ʲôҲû�У�
GS>[ null null ] pstack [null null] GS<1>
array����������Ҫ��һ�����β�������������������ʽΪ��n array�����д˲�����һ������ n �� null Ԫ�ص����齫��������������ͬ [��]���ڶ�������ʱ�Ĺ�����ͬ�����磺3 array �� [ null null null ] ��һ���ġ����������IJ�����λ�ڲ�����ջ����ˡ�����ڸ������д��в�������˲����������������ջ�в���Ϊ��˵�Ԫ�ء����û�в�������������ݲ�����ջ�е���˵�Ԫ����������������Ϊ������˶���Ԫ��Ϊ���Σ�����Ϊ������IJ�����������ʾ�����ݳ�����Ϣ��
length���˲���������������Ԫ�صĸ�����null Ԫ��Ҳ�������ڡ��ò�������Ҫһ���������������ֻ����������������������������������ջ�е����Ԫ�ء��ڴ˲������֮�󣬸ò������Ӳ�����ջ����ʧ����ˣ����������֮ǰ������һ�������������ô����������ִ��֮����������Ԫ�ظ�������Ϊ������ջ��һ��Ԫ�ط�������ˡ����磺
GS>[ 1 2 3 4 5 ] length pstack 5 GS<1>
���û��û�и��� length �������IJ�������ô�����ǰѲ�����ջ�����Ԫ�أ�Ӧ���Ǹ����飩��Ϊ����ִ�� length �������Ѹ�����Ԫ���滻Ϊ�������Ԫ�ظ�����������ʾ��
GS<1>pstack [1 2 3 6 7] GS<1>length pstack 5 GS<1>
���������ڲ�����ջ��ǰ�����Ԫ�ز����������ʾ������Ϣ��
get���˲�������Ҫ�����������ֱ�Ϊ��������������ò�������������ȡ��ָ����Ԫ�أ���Ԫ�ص�λ���ɵڶ��������������ڶ�����������ָ��λ�õIJ���ֻ������Ȼ��������˵���㿪ʼ����������ʵ�ϴ˹������������еIJ�������������Щ������������Ƴ�������ջ�������ǵ����ͱ���Ϊ��Ȼ������һ���Ժ󽫲���ǿ����������һ��ʾ����
GS[1 6 3 0 9] 0 get pstack 1 GS<1>
put����������Ҫ�������������顢λ�������Ͳ���Ԫ�ء������������������в���Ԫ�ء�ִ�еĹ����ǣ��ӵ�һ��������ȡ�����飬Ȼ��λ���ڶ�������������λ�ã����õ����������滻��λ�õ�Ԫ�ء�Ȼ����������鲻������ڲ�����ջ�С���ˣ�Ϊ����ȷ��ʹ�� put �����������ǿ��Զ���һ������������� PostScript ������� key ����Ȼ����Ӧ�IJ�����������������Ͻ��У��������������ջ��������ʾ�������뿴�����ʾ����
GS>[1 2 3] 0 8 put GS>
������ջ�����ʲôҲû�з�����ȴ��û�г�����Ϣ����ʵ�ϣ�put �����Ѿ�����ˣ����ǽ����û�д�����������ջ������õ��ý�������ǿ��԰������µķ���������
GS>/ar [ 1 2 3 ] def GS>ar 0 8 put GS>ar pstack [8 2 3] GS<1>
�����һ����һ������������� PostScript ����˵���� key ���Ķ��壬�������� ar���ڶ����� put �����������������ĵ�һ��Ԫ�أ���λ���������� 0 ��ָ���ģ��滻�� 8��֮��� ar pstack �������������� ar ��ֵ���뵽������ջ�в���ʾ���е����ݡ�����Ӧ��ע�Ȿ�ĺ���Ĺ��ڱ�����������ݡ����⣬�ں����������ﻹ���漰���ʵ䣨dictionaries�����ʵ��ջ��dictionary stack����
getinterval���˲��������ڴ�����������������飨subarray��������Ҫ�����������ֱ��ǣ����顢������Ŀ�ʼλ��������������Ԫ�ظ�������ִ�н���ǽ����飨�ɵ�һ�������������д�ָ��λ�ã��ɵڶ���������������ʼһ����Ŀ���ɵ�����������������Ԫ�ؿ�����һ���µ��������档��������齫�����뵽������ջ�С����磺
GS>[1 2 3 4 5 6 7 8 9] 2 3 getinterval pstack [3 4 5] 2GS<1>
putinterval���ø�����һ�������滻��һ��ָ������������顣����Ҫ������������һ���DZ��滻���飻�ڶ�����һ������������ָʾ���滻�������ڱ��滻�����е�λ�ã��������������滻�������顣�������� put ����dz����ƣ���Ҳ���ѽ�����������ջ�С��������ʾ�����Կ�����������ʾ������
GS>/ar [1 2 3 4 5 6 7 8 9] def GS>ar 3 [0 0 0] putinterval GS>ar pstack [1 2 3 0 0 0 7 8 9] GS<1>
aload����������һ��������Ϊ������������Ԫ����Ϊ��ʵ�忽����������ջ�С�ִ�н����󣬴������Ϊ������ջ�еĵ�һ��Ԫ�ء������棺
GS>[1 2 3] aload pstack [1 2 3] 3 2 1 GS<4>
astore���ø�����һ��Ԫ���������滻�ڶ�������ָ���������е�����Ԫ�أ����ߵ�Ԫ�ظ�����ȡ����Ϊ�滻Ԫ����ɵ��µ����顣
GS>1 2 3 [null null null] astore pstack [1 2 3] GS<1>
copy�������ɵ�һ�����������������鵽�ڶ���������ָ�������дӵ�һ��Ԫ�ؿ�ʼ�������顣��ʾ�Ľ���DZ���������������ǵڶ�������ָ�������顣���ϣ�������ڶ��������������ʽ���Զ���һ������������������ʾ����
GS>[1 2 3] [4 5 6 7 8] copy pstack [1 2 3] GS<1>/ar [4 5 6 7 8] def GS<1>[1 2 3] ar copy GS<2>ar pstack [1 2 3 7 8] [1 2 3] [1 2 3] GS<3>
����Ԫ�ز�һ��������������Ҳ������Ϊ�����Ԫ�ء������ζ���� PostScript �����������Ƕ�ס��������ʹ��������;���궨���Ϊ���ܡ��������������Դ����������ά���С�Ŀǰ��������������������⡣
���еı�����Զ����Զ��������ʹ�ñ����������ݿ��Բ��ؿ����������ڴ��е�λ�á���ȡ�ڴ���е����ݿ���ͨ��������ַ���߸��������ݵı�������key����ʵ�֡�ǰһ�ַ������� C ����ʹ��ָ�롣����㲻��ʹ�õ�ַ��ô��һ��ʹ�ñ�������key���ķ���������㹻�ˡ�Ȼ�������Եı��������߽���������Ҫ�����ڴ�Ĵ�ȡ��������ز������ɴˣ���ſ��Զ���һ���ֻ���һ��Ӣ���ַ�����Ȼ������ʵ�帳ֵ����ʵ�ϣ�������Щ��������Ϊ����ʹ���߷���ĸ��߱�������붨��ʲô����������ֵ�Ƕ��١����������߽�������Ϊ�û��ı���ָ��һ���ڴ�β������еĹ��ڸñ�������Ϣ����Ϊ���ݱ��浽�˴���PostScript Ҳ�����ƵĽṹ��PostScript �Ĵʵ�����˱�����������ص�һЩ���塣�� PostScript �����У��ʵ䣨dictionary���������� key-value ����ɣ��Եĵ�һ��Ԫ�ر��������֣�key�����ڶ���������ֵ(value)�����磬add ��һ�����֣�key�����Ĺ������������ӷ���value������Ϊ add �������� systemdict ���ϵͳ�ʵ��У���� PostScript ����֪�� add �ĺ��塣���û����� 1 2 add pstack �������ʱ���ῴ����� 3��������Ϊ PostScript �Ȳ���ǰ������Ȼ��������������Щ���������Ȳ��� 1 Ȼ���� 2 ��aad��ǰ����������������������������������ջ�С�����������Ϊ�ַ��������п����Ǹ� key ���֡����� PostScript �㿪ʼ�������ֵ��������������֡�����ҵ������Ӧ�Ķ��������������� add ������ϵͳ�ʵ� systemdict �У�PostScript ���Ի�ö�Ӧ��������֣�key���Ķ�����value����Ȼ��˳��ִ���������Ԫ�س�ջ�������������ǵ������ͣ��ٰѽ��ѹ�������ջ��ʹ���Ϊ����Ԫ�ء����������ʣ�µ��ַ��� pstack ��ϵͳ�ʵ��е���˼���ǣ�����ʾ��ǰ������ջ�е����ݵ���׼����豸�С������ǿ����������Ҳ�����ˡ���һ�������ǿ��Թ���ĸ�������һ����������1 2 dad pstack���������ᱨ��� PostScript ��û�д� key ���ֶ���ij�����Ϣ��
��Ȼ��PostScript û�а������޶�����Щ�Ѵ�����ϵͳ�ʵ��еĶ�����û����԰�һЩ���̻��������ʶ������Լ����������������һ����ʶ��ô���ǾͿ��Ե��ø����ֻ��� key ��Ϊ������������������PostScript ���������������Ŀ����ʵ���������ñ�����ԵĻص������ڱ����Ķ������DZ���������������ʽ��/x value def������ value ���������������顢�ַ����� PostScript �������������ǿ����������������� /x 12 def ��ִ��������ڽ�����������������PostScript ����������ȡ�� /x��12�� def ����������б�� / ��ʼ�Ķ��󽫱����������� key �������������ܶ��ܱ����뵽������ջ���ʵ��ջ�ж����ؿ��������Ƿ�����ڴʵ��С�def ������ PostScript ϵͳ�ʵ��е�һ�� key-value �ԡ�����Ҫ������������һ���Ƕ������ key ���֣��ڶ����ǽ���������һ�� key ��ֵ����ˣ������� /x 12 def ִ��֮�� PostScript �ᴴ��һ�� key-value �Բ��������浽ָ����ȱʡ�ʵ䡪�� current �ʵ��С�ֵ��ע����ǣ��� key-value �Խ���Ϊ current �ʵ��ջ�����Ԫ�ء���һ���Ժ󽫻��õ������ˣ��������Ự������PostScript ���� x ���� 12 ������
��������˵���κ���б�� / ��ͷ���ַ������������� key��Ȼ����û��DZ���ʹ����Щ��ĸ������������ַ������򣬵���б�������ı����ű������ key ʱ���������һЩ�޷�Ԥ�ϵĽ������Ϊ��Щ�ַ��� PostScript ��������������á�key ���ֵ��ַ������û���ʹ�õĽ��������ơ���ʵ�ϣ����������ϰٸ��ַ����� key ���ִ��ڣ��������������ֿ������Ǻܲ�����ġ�PostScript �Դ�Сд������һ�ص���û������˺ܶ෽�㡣���У��û������ key ���ֲ�Ҫ�� PostScript �е�ϵͳ key ������ͬ�������¶���� key ���Ḳ�ǵ�ϵͳ������Ǻ��������Խ�ġ����磬����������� /add 13 def ��������ô add ����ת����һ��������ͬʱ������Ự���µIJ����� PostScript �ļӷ����ܽ�ʧȥ������ƪ�����ޣ����кܶ��ⷽ������ݽ��ŵ������������н��ܡ�
PostScript ��Ñ����loops����һ��ʵ���ظ�����Ľṹ�����ṩ��һ��ִ�д�����ͬ���Ͳ����ķ�������Щ��������Ŀ�����Ƿdz��޴�ġ�ȫ����Щ�ظ�����������һ��������ʵ�֡���������ݽ��漰��Ñ���������
repeat����������Ҫ������������һ��������һ����������ָʾÑ���Ĵ������ڶ����������ɿ鶨��� { �� } �������һ�� PostScript ����顣���������������İ���һϵ��ָ���������������ʽ���磺n { ... } repeat����������˲�����PostScript ���ѵ�һ���������뵽������ջ�С�Ȼ���ٶ�ȡ������ { ... } �����ָ����PostScript ��ϵͳ�ʵ�������ҵ� repeat ����ʼִ�����Ķ������������ǵڶ�������ָ���Ķ����鱻�ظ�ִ���� n �Ρ������ʾ����������ϸ��˵����
GS>3 {1} repeat 1 1 1 GS<3>
�������������ֵ 1 ���뵽�˲�����ջ���档��ʵ�ϣ�����ij���dz��򵥣������Dz��� 1 ���������滹��һ����΢���ӵ�ij���
GS>1 5 {1 add} repeat pstack 6 GS<1>
��������У���һ���� 1 �Ƚ��뵽������ջ�У�Ȼ������ { 1 add } ��ִ�� 5 ���� 5 �β����������ġ���һ����ִ�� 1 add ���������� add ��Ҫ�����������ڶ��������Ѿ������ˣ���һ��������Ҳ���� PostScript �����еIJ��������ǴӲ�����ջ��ȡ���ġ���ˣ���һ��Ñ��ʵ��ִ�е��� 1 1 add ��������һ���Ľ���ǽ�������ջ��Ψһ��Ԫ�� 1 �滻���� 2�����������ڶ���ִ�� 2 1 add �����Ѷ�ջ�е�ΨһԪ���滻���� 3��������ƣ����µ������ֱ��ǣ�3 1 add��4 1 add �� 5 1 add�������ڴ� repeat ����ִ��֮�������ջ����һ��Ψһ��Ԫ�ء���6��
for��������ʹ��һ�����α��������Ƹ���������Ñ���������ÿ��Ʊ����ӳ�ʼֵ��ʼÿִ��һ��Ñ������ۼ�һ�Σ�ֱ�����������Ľ�ֵ�����Դ�������Ҫ�ĸ���������ǰ�����ֱ��ǣ���ʼֵ�������ͽ�ֵ�������������붼����ֵֵ������������������ʮ�����������ĸ�������һ�γ��ò£¬¿ï¿½ï¿½ï¿½ï¿½ï¿½Ò»ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ò²ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ { �� } �������һ������顣�������������ʽΪ��Initial Increment Limit Procedure for��������ִ��ʱ��PostScript �ȴ���һ����ʱ������������ PostScript ������˵���ǿ��Ʊ��������ѳ�ʼֵ Initial ��������ͬʱ��ֵ�������������ջ�С���Ҳ���ᱻ Procedure �����е�ij������ʹ�ã������ʹ�ã��������Ƴ�������ջ����������һֱ�����ڶ�ջ�С�������������ʼֵ��Ñ���� Procedure ����ִ��һ�Ρ������ż��������ۼ�һ������������ Increment ����������ֵ�����Ñ��ִ����ȥ��ֱ�����Ӻ�ļ�������ֵ�����˽�ֵ Limit����������˼���Dz��ڳ�ʼֵ Initial �ͽ�ֵ Limit ��ȷ���������ˡ�������� Increment �����ģ���ô for ����ڼ����������ڽ�ֵ Limit ʱֹͣ����֮�������� Increment Ϊ��ʱ��for ����ڼ�������С�ڽ�ֵʱֹͣ�����������ı仯��������Ƿǿյġ�Ҳ����˵�������� Increment Ϊ��ʱ��ʼֵ Initial ����С�ڽ�ֵ Limit����֮��Ȼ�������ʾ�������˱Ƚ���ϸ��˵����
GS>1 -0.5 -1 {} for pstack -1.0 -0.5 0.0 0.5 1.0 GS<5>clear 0 1 1 23 {add} for pstack 276 GS<1>
��һ������ʲôҲû��������ΪÑ����Ϊ�ա���˼�������������ֵ����Ϊû�б�ʹ�ö������ڲ�����ջ�С��ڶ��������Ñ��������� add �����������Ҫ��������������һ��������ͨ���Dz�����ջ�е����Ԫ�ض��ڶ������������Ǹ�Ñ��ÿһ�����������ջ�ļ���������ֵ���ڶ�������ʵ���������ǰ 23 ���������ĺ͡���������Ҫһ������ij�ʼֵ���ڼӷ����㡣����� for ����֮ǰ����һ�� 0��ע���������� for ���
forall�������������������������ڸ��������ÿһ��Ԫ�ء�Ϊ��ʵ�����Ŀ�ģ�����Ԫ���Ǵӵ� 0 ����ʼһһ�����ʡ���������һ����ʱ��������������Ñ�����ü��������ij�ʼֵΪ 0������Ϊ 1����ֵΪ��������ij��ȡ�Ñ����ʽͬ for ���������һ����Ψһ�IJ����ǣ�������Ԫ����ȡ������������ΪÑ����IJ���������������Ҫ��������������һ���DZ�Ñ����ʹ�õIJ��������飻�ڶ�������Ñ�������顣forall �����������ʽΪ��Array Procedure forall�������ʾ���е�һ�� forall �������ڼ�����������Ԫ�غͣ��ڶ���������Ϊ�˽�һ��˵������������ΰѸ��������Ԫ��ѹ�������ջ�ġ�
GS>0 [11 23 45 -89 26 12 0 -34] {add} forall pstack -6 GS<1>[1 22 -12 0] {} forall pstack 0 -12 22 1 -6 GS<5>
loop��������ֻ��һ��Ñ���������������ִ��ʱ��Ñ���彫��ͣ�ı�ִ�С����仰˵������ִ����һ������Ñ��������Ñ������û���������ֹ��䣬��ô����������ֻ��ͨ���� Ctrl-C �������ⲿ�ж���ʵ���ˡ����Ñ�����ں��е� exit ���� stop ���ִ��ʱ��PostScript ��������Ñ��ת��ȥ������һ��������󡣴�����ı�����ʽΪ��Procedure loop��
�� PostScript �У����̻���˵��ָ����һ������˳�򼯡���Щ������������һ�Զ������{ �� }��֮�䡣���̺ͺ����������ͨ�� key ������ʵ�֣��磺/Macro1 {1 add 2 mul} def����������֮��key Macro1 ������ֵ {1 add 2 mul} ���� key-value �Ե���ʽ���뵽�ʵ��в�λ�ڴʵ��ջ����ˡ�Ȼ�󣬵����� Macro1 �����ڽ���������������ʱ�����Ķ�������ִ�С��鶨����е����ݿ��Ը��������Ҫ���߼򵥻��߸��ӡ��ں��������������ǽ����ӹ��ں�����ݡ�Ŀǰ����Щ�򵥵�˵���������ǵ���˵�Ѿ��㹻�ˡ�
����һЩ��ϰ�����߼���Ա������ݵ��˽⡣��Щ����Ĵ𰸽�����һƪ�����������
Webpages maintained by the LinuxFocus Editor team
© Emre Demiralp LinuxFocus 1999 |
1999-08-24, generated by lfparser version 0.6