Семь уроков по PostScript


Массивы - часть 2


[0 1 2 3 4 5] 5 get

в вершине стека будет число 4.

Для работы с массивами также необходим оператор length, возвращающий длину массива (то есть число его элементов). Следующая программа распечатывает массив, находящийся в стеке.

/LeftM 60 def

/TmpString 40 string def

/Helvetica findfont 11 scalefont setfont /newln

{currentpoint 15 sub exch pop    % y-15

LeftM exch moveto} def

/printarr    % в стеке массив

{/arr exch def  % поместить массив в переменную 0 1 arr length 1 sub % параметры цикла

{arr exch get    % следующий элемент

 TmpString cvs

 show newln} for

} def

LeftM 400 moveto

[(Julia)         % строка

15    % число

/SimplName   % литерал

[8 3 4]  % массив

{NewLN}  % исполняемый массив

LeftM % переменная

]

printarr

showpage

Перед каждым выполнением цикла оператор for  помещает в стек счетчик, который используется в качестве индекса в строке arr exch get. ( В этой строке берется не сам массив из стека, а ссылка на него по имени переменной, поэтому и делается exch.)

Результат работы программы

Julia

15

SimplName

--nostringval--

--nostringval--

60

 

Как видно из примера обычные действия над массивом в PostScript достаточно утомительны. Так как наиболее частой операцией над массивом в этом языке является применение некоторой процедуры к каждому его элементу, то для этого есть очень красивый оператор farall, который применяет к массиву-аргументу заданную процедуру. Предыдущий пример можно записать с его помощью более компактно:

arr {30 string cvs show} forall

 




- Начало -  - Назад -  - Вперед -



Книжный магазин