|
|
Bu makalenin farkl� dillerde bulundu�u adresler: English ChineseGB Deutsch Francais Turkce |
Emre Demiralp <emre(at)kardelen.fe.itu.edu.tr> Yazar hakk�nda: Ben, �stanbul Amerikan Robert Koleji'nde ��renci olmakla birlikte, ayn� zamanda, �stanbul Teknik �niversitesi'nin Fen-Edebiyat Fak�ltesinin bilgisayar labaratuvar�n�n y�neticilerinden biriyim. Bu labaratuvarlarda en �ok kullan�lan i�letim sistemi LINUX. �lgi Alanlar�: PovRay ve PostScript, animasyon, CD dizayn�, programlama, holografi vb. 1994'ten beri LINUX kullanmaktay�m. T�rk�e'ye �eviri: Resul Dilsiz <resul/at/be.itu.edu.tr> ��erik: |
Postscript III:PostScript'in ��lenen Y���n�: Diziler, De�i�kenler, D�ng�ler ve Makro Tan�mlama�zet:
Yazar, PostScript dilinin i�lene y���nlar�n� anlatmaya devam ediyor. Dizelerin tan�mlar�, dize operat�rleri, de�i�kenler, d�ng�ler, ve makro tan�mlamalar�n�n hepsi burada, yeterli detay, a��klay�c� �rnekler ve bir sonraki makalede yan�tlanacak olan sorularla anlat�lm��t�r. Bu makale, i�lenen y���nlar�n� anlatmaya tek ba��na yeterli de�ildir. Hikaye, gelecek makalelerde devam edecektir. |
Bu PostScript ile alakal� makaleler serisinin ���nc�s�d�r. PostScript'in i�lenen y���nlar�n� anlatmaya devam ediyoruz. Dizelerin, dize operat�rlerinin, de�i�ken tan�mlamalar�n�n, d�ng�lerin ve makro tan�mlamalar�n�n alt�n� �iziyoruz. Bu konular hakk�nda �nemli noktalar� sunmak istiyoruz. Sunum ayr�ca ��retici �rneklerle zenginle�tirilmi�tir. ��lenen y���nlar�, de�i�ik konularda yaz�lan gelecek makalelerde devam edecektir.
Bu serinin �nceki makalelerinde, i�lenen y���nlar�n� yap�s�na ve i�lenen y���nlar�n yap�s�n� de�i�tirebilen operat�rlere de�inmi�tik. Hat�rlayaca��m�z gibi, i�lenen y���nda tutulan b�y�kl�klerin hepsi, i�lenen y���nda referans noktas� yaratmaya yarayan �zel bir eleman hari�, tamsay�lard�. Bu elemanlar, -marktype- olarak adland�r�l�rd�. cleartomark ve counttomark operat�rleri, i�lenen y���n�n ba��ndan bu i�aretlere kadar olan elemanlar� saymak veya silmek �zere kullan�l�rd�. Tabii ki de, bu bir gruplama kolayl���d�r fakat, tek gruplama kolayl��� bu de�ildir. Bir�ok element bar�nd�ran tek bir varl�k da yaratmak m�mk�nd�r. Bu varl�k dize olarak adland�r�l�r ve dizelerin elementleri �zerinde PostScript dilinin dize operat�rleri ile i�lem yapmak m�mk�nd�r. Dize operat�rlerini s�ralayarak, bu dize operat�rleri hakk�nda detay bilgiler ve a��klay�c� �rnekler sunaca��z.
[ :Bu, y���nda bir marktype elementi yarat�r. E�i olan ] i�areti girilmezse, mark komutu ile ayn� i�i g�r�r. Bu operat�rden sonra i�lenen y���na giren her element, i�lemci y���n�nda, kendilerinden �nce i�aretlenmi� bir referans noktas� oldu�u halde, ayr� elemanlar olarak kabul edilir. A�a��daki oturum, [ ve mark aras�ndaki ili�kiyi a��klar:
GS>[ pstack -marktype GS<1>2 3 mark pstack -marktype- 3 2 -marktype- GS<4>
] :Bu, yukar�daki [ operat�r�n�n e�idir. Y���n, bu element verilmeden �nce girilmi� bir marktype elementi i�ermelidir. Asl�nda bu, dizenin sonland�r�c� i�aretidir ve dize yap�m�n� tamamlar. Her biti�in bir ba�lang�c� oldu�u i�in, PostScript i�aretin e�ini, ] ba�lang�� i�aretini arar. E�er [ i�areti bulunamazsa, PostScript hata verir ve istenen i�lem yap�lmaz. E�er bu eleman hemen ['�n pe�ine girilmi�se, bo� bir dize yarat�l�r ve i�lenen y���n�nda tek bir varl�k gibi tutulur. A�a��daki oturumun g�sterdi�i gibi:
GS>[ pstack -marktype- GS<1>] pstack [] GS<1>
Bunlar�n ard�ndan, i�lenen y���n�, sadece bir eleman i�erir: bo� bir array. Bo� olmayan bir dize, [ ve ] aras�na dize elemanlar� direkt girilerek tek girdide a�a��daki oturumda g�r�ld��� gibi yarat�labilir.
GS>[ 1 2 3 ] pstack [1 2 3] GS<1>
G�rd���m�z gibi, dizemiz sadece bir varl�k gibi kabul edildi.
Dizeleri, her elementi belirlemeden, sadece i�erdi�i eleman say�s�n� belirterek de yaratbiliriz. Bu, nothing anlam�na gelen null eleman�yla yap�l�r.
GS>[ null null ] pstack [null null] GS<1>
array:(dize:) Bu komut i�in, tamsay� bir parametre gereklidir. parametre n ise, komut n array olarak girilir. Yap�ld���nda, tam olarak n adet null element i�eren bir dize yarat�l�r. Dize yaratman�n ba�lang�� ve biti� i�aretlerinin yapt���n�n ayn�s�n� yapar. �rne�in, 3 array, [ null null null ] ile ayn�d�r. Parametresini, i�lenen y���n�n en ba��nda arar. E�er komuttan �nce girilmi�se, i�lenen y���n�na girer ve komut taraf�ndan al�nan ilk eleman olur. E�er parametre girilmemi�se, i�lenen y���n�n ba��ndaki eleman ne olaca��n� belirler. Bu e�er bir tamsay�ysa, komut taraf�ndan kullan�l�r, e�er de�ilse uyumsuzluktan kaynaklana bir hata mesaj� g�r�nt�lenir.
length:(uzunluk:)Bu operat�r, dizedeki elemanlar�n say�s�n� d�nd�r�r. null elemanlar da say�lmaktad�r. Operat�r, parametre olarak dize al�r. Operat�r, parametresini i�lenen y���n�n�n ba��ndaki eleman olarak al�r. Parametre, i�lemin ger�ekle�mesiyle birlikte, i�lenen y���n�ndan kaybolur. Bu y�zden, e�er parametre komuttan �nce girilmi�se ve bu bir dizeyse, her�ey iyi gider ve i�lenen y���n�n�n ba��ndaki eleman tespit edilir. �rne�in:
GS>[ 1 2 3 4 5 ] length pstack 5 GS<1>
length operat�r� i�in parametre vermezsek, ya komut taraf�ndan i�lenen y���n�n�n ba��ndaki eleman kullan�l�r, i�lenen y���n�ndan at�l�r ve dizedeki eleman say�s� i�lenen y���n�n�n ba��na yerle�tirilir,
GS<1>pstack [1 2 3 6 7] GS<1>length pstack 5 GS<1>
ya da o anki i�lenen y���n�n�n ba��ndaki eleman dize de�ildir ve bir hata mesaj� g�r�nt�lenir.
get:(al:)Bu operat�r iki parametre al�r. �lk ve ikinci parametreler s�ras�yla dize ve tamsay�d�r. Operat�r dizeden belirtilen eleman� al�r. Al�nacak eleman�n pozisyonu, operat�r�n ikinci parametresidir. Pozisyonlar do�al say�larla dizinlenmi�tir, yani s�f�rdan ba�larlar. Asl�nda bu kural her operat�r parametreleri i�in ge�erlidir. Parametreler komut taraf�ndan kullan�l�r ve i�lenen y���n�ndan at�l�rlar. Verilen parametrelerinin t�rleri uyu�mal�d�r. Bu noktada daha fazla ayr�nt� vermiyoruz. get'in kullan�m� a�a��daki gibidir.
GS[1 6 3 0 9] 0 get pstack 1 GS<1>
put:(koy:)Bu komutun �� parametreye ihtiyac� vard�r. Bunlar, s�ras�yla dize, dizin ve dizenin aras�na sokulacak elemand�r. �al��t�r�ld���nda komut, ilk parametre taraf�nda verilen dizeyi al�r, dizini ikinci parametreyle verilen pozisyondaki eleman� bulur ve bu posizyondaki dize eleman�n� ���nc� parametrede girilen �ey ile de�i�tirir. Sonu� dizesi, i�lenen y���n�nda tutulmaz. Bu y�zden put operat�r�n�n kesin kullan�m� i�in, dize de�i�keni tan�mlayabiliriz (ya da PostScript terminolojisinde bir anahtar). Uygulama bu de�i�ken �zerinde yap�l�r ve sonu� sonra i�lenen y���n�na girer ve oradan g�sterilir. A�a��dakini inceleyiniz.
GS>[1 2 3] 0 8 put GS>
Burada i�lenen y���n�nda hi�bir�ey olmuyor. Ama hata mesaj� da g�r�nt�lenmiyor. Asl�nda, put komutu yapmas� gerekeni yap�yor ama sonu� i�lenen y���n�nda tutulmuyor. Ayn� i�lemin sonucunu i�lenen y���n�nda tutabilmek i�in a�a��daki oturumu inceleyiniz:
GS>/ar [ 1 2 3 ] def GS>ar 0 8 put GS>ar pstack [8 2 3] GS<1>
Burada �nce dize de�i�keni (T�rk�esi) ya da anahtar (PostScript'�esi) tan�mlan�yor. De�i�ken ismi ar. �kinci ad�mda dizinin ilk eleman�n� (dizini s�f�r) put operat�r�n� kullanarak 8 ile de�i�tiriyoruz. Bundan sonra ar pstack komutu, ar de�i�kenini i�lenen y���n�na al�r ve i�ini g�sterir. de�i�ken tan�mlama konusuna bu makalede daha sonra de�inilecektir. Ayr�ca, bu serinin gelecek makalelerinde s�zl�kler ve s�zl�k y���nlar� konusuna da de�inilecek.
getinterval:(aral�kal:)Bu operat�r, verilen bir dizeden bir alt-dize yarat�r. �� parametreye ihtiya� duyar. Bunlar s�ras�yla, alt-dizenin yarat�laca�� dize, alt-dizenin ilk eleman� olacak dizin ve alt-dizenin eleman say�s�n� belirten tamsay�. �al��t�r�ld���nda, komut, ilk parametrede verilen dizeden, ikinci parametrede verilen dizinden ba�lamak suretiyle, ���nc� parametrede verilen say� kadar eleman al�r ve bunlar� yeni bir dizeye kopyalar. Yeni dize, i�lenen y���n�na eklenir. �rne�in,
GS>[1 2 3 4 5 6 7 8 9] 2 3 getinterval pstack [3 4 5] GS<1>
putinterval:(aral�kkoy:)Bu, verilen dizenin bir alt-dizesini belirtilen ba�ka bir dize ile de�i�tirir. �� parametre gereklidir: �lki, alt-dizesi de�i�tirilmek istenen dizedir, ikincisi, de�i�tirilmek istenen alt-dizenin pozisyonunu belirten alt-dizedir ve ���nc�s� verilen dizede de�i�tirilmek istenen alt-dizenin yerine yerle�trilecek olan alt-dizedir. Komut, put komutuna �ok yak�nd�r. ��lenen y���n�na sonu� d�nd�rmez. Sonucun nas�l g�r�nt�lendi�ini g�rmek i�in, a�a��daki oturumu inceleyiniz:
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:(dize y�kle:)Bu, parametre olarak dize al�r ve bu dizenin elemanlar�n� tek girdiler olarak i�lenen y���n�na kopyalar. �al��t�r�ld�ktan sonra i�lenen y���n�n�n ba��ndaki elemen dizedir.Bu da:
GS>[1 2 3] aload pstack [1 2 3] 3 2 1 GS<4>
astore:(dize sakla:)Bu komut, ikinci parametrede verilen dizenin t�m elemanlar�n�, i�elenen y���n�ndan ald��� ayn� say�da elemanla de�i�tirir. Sonu�, yer de�i�tirilmi� olan elemanlar� i�eren, yeni dizedir.
GS>1 2 3 [null null null] astore pstack [1 2 3] GS<1>
copy:(kopyala) Bu, ilk parametrede belirtilen dizeyi, ikinci parametrede belirtilen dizenin ba��na kopyalar. G�r�nt�lenen sonu�, ikinci dize de�il, kopyalanan alt-dizedir. �kinci dizenin son halini g�rebilmek i�in a�a��daki de�i�ken tan�mlamas� kullan�labilir.
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>
Dize elemanlar�n�n tamsay� olmalar� �art de�ildir. Karakter dizgisi de olabilir. Bu da, dizelerin birbirinin i�ine ge�mi� yap�s�na, PostScript'te izin veriliyor demektir. Bu avantaj, dizey i�lemlerini ve dizeyler �zerinde makro tan�mlamalar�n� kullanmam�za izin verir. ��ten fazla elemana dayanarak tan�mlanabilen vekt�r nicelikleri veya �ok-boyutlu dizilerle u�ra�mak bile m�mk�nd�r. �imdilik bu kadar bilgi yeterli olacakt�r.
Her programlama dilinde, de�i�ken tan�mlamak m�mk�nd�r. De�i�ken tan�mlamak, b�y�kl�kleri, i�inde tuttuklar� b�y�kl�klerin haf�zan�n neresine yaz�l� oldu�unu d���nmeden kullanabilme imkan� verir. Haf�zan�n belli bir kesiminde saklanm�� olan de�ere, o kesimin adresini vermek veya i�eri�i i�in bir anahtar girmek vas�tas�yla ula��labilir. �lk yakla��m, C'de oldu�u gibi, i�aret�iler kullanmakt�r. Adreslerle ili�i�inizin bulunmamas�n� dilerseniz, anahtar kullanmak sizin i�in yeterli olacakt�r. Mamafih, bu durumda haf�za eri�imi ve di�er i�lemler ile dilin derleyicisi veya yorumlay�c�s� ilgilenmek durumundad�r. Bunun i�in siz sadece bir karakter dizgisi, bir kelime girip, bu varl��a de�er atars�n�z. B�t�n bu i�lemler asl�nda sizin bak�� a��n�zdan programlama diline, de�i�kenin ne oldu�unu s�ylemek ve bu de�erin ne oldu�unu s�ylemektir. Derleyici veya yorumlay�c� bir haf�za kesimini de�i�keniniz i�in belirler ve bundan sonra de�i�keninize yap�lan b�t�n atamalar, bu adrese veri olarak g�nderilir. PostScript'te de buna yak�n bir yap� vard�r. PostScript, i�inde isimler, anahtarlar ve ilgili tan�mlamalar� bar�nd�ran s�zl�klere haizdir. PostScript terminolojisinde, bir s�zl�k, ilk teki key (anahtar) olarak adland�r�lan, ikinci teki de value (de�er) olarak adland�r�lan �iftlerden olu�mu�tur. �rne�in, add (ekle) aritmetik toplama i�lemi (value) yapan bir isimdir (key). PostScript add komutunun anlam�n� bilmektedir, ��nk� bu bilgi systemdict ad� verilen bir s�zl�kte saklanmaktad�r. E�er 1 2 add pstack komutunu girerseniz, sonu� olarak 3 g�r�rs�n�z, ��nk� PostScript bu �� isme bakar ve �unlar� yapar: 1, 2 ve add kelimelerini i�ler. �lk iki nesne tamsay�d�r, bu y�zden i�lenen y���n�na at�l�rlar. ���nc� nesne ise bir yaz� karakteri dizisidir ve bir isim (key) olabilir de olmayabilir de. PostScript, s�zl�klerinde bu ismi arar. add ismi, systemdict s�zl���nde bulundu�u i�in bu isim (key) i�in bir eylem (value) vard�r. Bu eylem, s�ras�yla, i�lenen y���n�n�n en �st�ndeki iki eleman� almak, bunlar�n aritmetik toplam�n� hesaplamak ve sonu� eleman�n� i�lenen y���n�n�n ba��na koymakt�r. Komutun geri kalan k�sm� ise pstack t�r ve bu da sistem s�zl���nde yer almakta olup, PostScripte, i�lenen y���n�n�n ba��ndaki eleman� standart ��kt� birimine yazd�rmas�n� s�ylemektedir. Di�er yandan yorumlay�c�ya komut olarak -bilerek veya yanl��l�kla 1 2 dad pstack yazabilirdik. Bu durumda yorumlay�c�, PostScript s�zl�klerinde dad gibi bir anahtar veya isim bulamad���na dair bir hata verecekti.
Ayr�ca PostScript'in sistem s�zl���ndeki tan�mlar ile s�n�rl� de�iliz. Kullan�c� tan�ml� komutlar olarak kimlik ve prosed�rler tan�mlamak m�mk�nd�r. Yapt���m�z bir kimlik tan�mlamas� ise isim veya anahtar�, PostScript terminolojisinde olmamas�na ra�men de�i�ken(variable) olarak �a��r�r�z. Buradaki amac�m�z, di�er �ok bilinen programlama dillerinde oldu�u gibi yeniden �a��rma i�lemleri yapabilmektir. De�i�ken tan�mlamak i�in tek yapmam�z gereken, /x value def yazmakt�r. Burada value tamsay�, dize, karakter dizesi gibi, herhangi bir PostScript nesnesidir. �rne�in, yorumlay�c�ya /x 12 def girdi�imizi kabul edelim. Yorumcu, �� nesneyi i�ler: /x, 12 ve def. / i�areti ile ba�layan nesneler, anahtar veya isim olarak kabul edilirler. Bunlar, i�lenen y���n�na, s�zl�kte olsalar da olmasalarda s�zl��e eklenir. def komutu da anahtar-de�er �ifti olarak i�lenecek bir komut olarak sistem s�zl���nde tan�mlanm��t�r. �lk i�leneni anahtar olarak kabul eder ve ikinci i�leneni bu anahtara atanacak de�er olarak kabul eder. Bu y�zden PostScript, bu komutun ard�ndan anahtar-de�er(key-value) �ifti olu�turur ve /x 12 def komutunun tamamlanmas�yla yap�lan bu tan�mlamay�, ge�erli s�zl�k(current dictionary) ad� verilen �zel varsay�lan bir s�zl��e ekler. Bu kay�t, s�zl�k y���n�n�n en �st�ndeki eleman� olur (bu konuya ilerideki makalelerde de�inilecektir). Bu noktadan sonra, b�t�n oturum boyunca x PostScript taraf�ndan 12 olarak tan�nacakt�r.
Prensip olarak, / i�aretiyle ba�layan herhangi bir karakter dizesi, anahtar olarak kullan�labilir. Ancak, numaralar ve harflerin d���nda kalan karakterleri de�i�ken ismi olarak kullanmaktan ka��nmak gerekir. Aksi halde, noktalama i�aretleri, aritmetik operasyon i�aretleri vb. karakterler, istenmeyen eylemlerin ger�ekle�mesine neden olabilirler ��nk� bu karakterlerin PostScript dillerinde farkl� anlamlar� vard�r. De�i�ken ismi olarak kullanaca��n�z karakter dizesinin limiti, yorumlay�c�n�z�n kapasitesiyle belirlenir. Asl�nda anahtar ismi olarak y�zlerce karakterden olu�an karakter dizeleri kullanmak, m�mk�n olsa bile uygun de�ildir. PostScript k���k-b�y�k harf duyarl� olmas�ndans sebep, anahtar isimlerinde yeterince esneklik sa�lamaktad�r. Anahtar isimleri PostScript'in sistem anahtarlar�nda se�ilmemelidir. Aksi halde, yeni anahtar, sistem komutunun �zerine yaz�lacakt�r ve bu istenmeyen bir durumdur. �rne�in, /add 13 def komutunu �al��t�rd�ktan sonra, add anahtar� bir sabit de�ere d�n��m��t�r ve bu noktadan sonra oturumda toplama i�lemini sa�l�kl� bir �ekilde yapmak m�mk�n olmayacakt�r. Bu konuda s�ylenecek �ok �ey olmas�na kar��n, �imdilik birka� paragrafla y�zeysel bir anlat�m yap�p, kalan� gelecek makalelerde anlat�lacakt�r.
PostScript, d�ng�ler ad� verilen, tekralama ama�l� yap�lara sahiptir. Ayn� t�rden i�lemleri tekrar tekrar yapmay� sa�lar. Yinelenecek olan i�lemlerin say�s� binler, milyonlar, milyarlar veya katrilyonlar olabilir. Hi� farketmez. Sadece bir komutla b�t�n prosed�r, d�ng�lerle �al��t�r�labilir. �lerleyen sat�rlarda d�ng�ler ve d�ng� komutlar� hakk�nda konu�aca��z.
repeat: (tekrar et:)Bu komut, iki parametreye ihtiya� duyar. �lki sade bir tamsay�d�r ve i�lemin ne kadar yinelenece�ini belirtir. �kinci ise genellikle eylemler blo�undan olu�an bir prosed�rd�r. PostScript'te blok, { ve } i�aretleri ile s�n�rland�r�l�r. Emirler ve komutlar, s�rayla bu i�aretlerin aras�na konar. Komutun s�zdizimi n { ... } repeat gibidir. Bu emir verildi�inde, PostScript, ilk parametreyi al�r ve i�lenen y���n�n�n ba��na yerle�tirir. Daha sonra { ... } bloklar�yla verilen prosed�r okunur. Sonunda repeat sistem s�zl���nden okunur ve tan�mlad��� i�lemler ger�ekle�tirilir. Komutun tan�mlad��� i�lemler sadece tekrarlamak oldu�undan, ikinci parametre oalrak veilren prosed�r n defa �al��t�r�l�r. Detaya inersek, �u �rne�i verebiliriz:
GS>3 {1} repeat 1 1 1 GS<3>
Bu komutla, �� tamsay� de�eri, 1, i�lenen y���n�na sokulur. Asl�nda buradaki prosed�r �ok basittir: sadece 1 girmektir. Daha karma��k olarak a�a��daki prosed�rleri verrebiliriz:
GS>1 5 {1 add} repeat pstack 6 GS<1>
Bu �rnekte �nce,1 i�lenen y���n�na girer, sonra {1 add} i�lenen y���n�nda 5 kere �al��t�r�l�r. 5 ad�m ��yle �al���r. �lk ad�mda, 1 add �al��t�r�l�r. add iki parametreye ihtiya� duyar, ikincisi, prosed�r�n kendisinde verilmi�tir ve 1'dir. �lk parametre ise, (veya PostScript terminolojisinde i�lenen(operand)) i�lenen y���n�ndan al�n�r. Bundan dolay�, tekrar�n ilk ad�m�nda 1 1 add �al��t�r�l�r. ��lenen y���n�n�n tek eleman� olan 1, bu i�lemden sonra silinir ve 2 olan sonu�, i�lenen y���n�n�n en �st�ne sokulur. Sonra ikinci ad�mda 2 1 add komutu �al��t�r�l�r ve sonu�, tek elemanl� i�lenen y���n�, 3 olarak i�lenen y���n�na yaz�l�r. B�ylece ���nc� ad�ma 3 1 add i�lemi kal�r. Di�er iki ad�m ise 4 1 add ve 5 1 add'dir. Bu y�zden i�lenen y���n�, komut �al��t�r�ld�ktan sonra, sadece 6'y� i�ermektedir.
for:Bu komut tekrarlamal� prosed�rlerin uygulanmas�nda, tamsay� bir kontrol de�i�keni kullan�r. Kontrol de�i�keni, bir ba�lang�� de�erinden ba�alr ve de�erini prosed�r�n her ayr� �al��t�r�lmas�ndan sonra de�i�tirir. Bu eylem, daha �nceden belirlenen de�er a��lana kadar devam eder. Bu y�zden, bu komut, d�rt i�lenene ihtiya� duyar, ilk �� tanesi s�ras�yla, ba�lang��(Initial), art��(Increment), ve limit(Limit)'tir. B�t�n bu �� parametrenin, say�sal de�er olmas� beklenir: tamsay� veya ondal�k say�. D�rd�nc� i�lenen ise, tek bir komuttan olu�abilece�i gibi { ... } format�nda komut bloklar� halinde de girilebilecek prosed�rd�r. Komutun tam s�zdizimi, ba�lang�� art�� limit {komut} for 'dur. Komut �al��t�r�ld���nda, PostScript, ge�ici bir saya� de�i�keni (PostScript terminolojisinde kontrol de�i�keni) yarat�r ve onun de�erini ba�lang�� de�i�kenine e�itler. Bu de�er, i�lenen y���n�na sokulur, {komut} taraf�ndan i�lenen olarak kullan�l�r veye kullan�lmaz. Kullan�l�rsa, i�lenen y���n�ndan at�l�r, aksi halde i�lenen y���n�nda kal�r. Saya� de�i�keni ba�lang��'a e�itlendikten sonra, {komut} �al��t�r�l�r. Bunun hemen ard�ndan saya� de�i�keninin de�eri art�� ile toplan�r. D�ng� daha sonra, bu �ekilde, yeni art�r�lm�� kontrol de�i�keninin de�eri limit de�eri a�ana kadar devam eder. A�ma, ba�lang�� ve limit de�er aras�ndan d��ar� ��kmakt�r. E�er art�� pozitif bir de�erse, for, kontrol de�i�keni limit de�erden b�y�k olana kadar �al���r. Aksi halde, for, kontrol de�i�keni limit de�erden k���k oldu�unda durur. Saya� de�i�keninin menzil ve aral��� bo� olmamal�d�r. Bu, art��'�n pozitif olmas� halinde, ba�lang�� de�erinin limit de�erinden k���k olmas� veya tam tersi olmas� gerekti�i anlam�na gelir. Daha a��k olmak i�in, a�a��daki oturumu �rnek verebiliriz:
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>
Buradaki ilk komut, hi�bir�ey yapmaz, ��nk� kullanmak �zere bir prosed�r yoktur. Bu y�zden, saya� de�i�keninin b�t�n de�erleri, i�lenen y���n�nda tutulur ve bunlar� kullanacak bir prosed�r olmamas�ndan sebep, orada kal�rlar. �kinci komut, prosed�r�nde iki paramatreye ihtiya� duyan add komutunu i�erir. �lk i�lenen, i�lenen y���n�n�n en �st�ndeki elemand�r ve ikinci ise d�ng�n�n saya� de�i�kenidir, ve i�lenen y���n�na o ad�mda girmi�tir. �kinci komut, ilk 23 pozitif say�n�n toplam�n� hesaplar. toplama i�leminin ��kt�s� i�in bir ba�lang�� de�erine ihtiyac� vard�r. Bu de�er de komuttan hemen �nce 0 olarak verilmi�tir. Ba�ka bir deyi�le, 0, for d�ng�s�n�n bir par�as� de�ildir.
forall:(hepsi i�in:) Bu komut verilen dizenin her eleman� i�in i�lem y�r�t�r. Bu ama� i�in, komut, verilen dizenin her eleman�n� s�f�rdan ba�lamak suretiyle numaraland�r�r. D�ng�y� kontrol etemek i�in ge�ici bir saya� kullan�r. Ge�ici saya� de�i�keninin ba�lang�� de�eri 0 olup, art�m de�eri 1 dir ve verilen dizenin uzunlu�u kadar devam eder. D�ng� yap�s� for komutlar�ndan birisi ile hemen hemen ayn�d�r. Tek fark, dize elemanlar�n�n bu komutun i�lemi taraf�ndan saya� de�i�keni yerine kullan�lmas�d�r. Komut iki tane i�lenene ihtiya� duyar, bunlardan birincisi i�lem taraf�ndan elemanlar� birer birer kullan�lan dizedir. �kinci i�lenen i�lemdir. Komutun b�t�n s�zdizimi Array Procedure forall'd�r. A�a��daki PostScript oturumu verilen dizenin toplam�n�n de�erlendirmesini ama�lamaktad�r ve di�er bir dizenin b�t�n elemanlar�n�n i�lenen y���n�na sevkedilmesi komutun daha sonraki a��klamalar� i�in sunulmu�tur.
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:(d�ng�:) Bu komut i�in sadece y�r�t�lecek i�lem olan bir i�lenen girilmelidir. �al��t�r�ld��� zaman, durmadan, defalarca i�lemi y�r�t�r. Di�er bir de�i�le, e�er i�lem �zel bir yap�ya sahip de�lise, sadece Ctrl-C gibi harici bir kesme yolu ile durdurulabilen sonsuz bir d�ng�d�r. E�er y�r�t�lecek i�lem exit veya stop komutlar�ndan birisini herhangi bir yerde i�eriyorsa, komutlardan birisi ile kar��la��ld���nda d�ng� d�n��� durur ve kontrol yorumun bir sonraki nesnesine d�ner. Komutun s�zdizimi Procedure loop �eklindedir.
PostScript'te Procedure veya Macro nesneler k�mesinin d�zenlenmesi anlam�na gelir. Bu nesneler �bek s�n�rlay�c� �iftleri { and } i�inde toplanmal�d�rlar. /Macro1 {1 add 2 mul} def gibi anahtar tan�mlay�c�s� ile isimlendirilebilirler. E�er yap�l�rsa, daha sonra anahtar /Macro ve de�eri {1 add 2 mul}en �stteki element olarak, key-value �ifti olarak, s�zl�k y���n� i�ine yerle�tirilmi� olan varolan s�zl��e eklenir. Bundan sonra, Macro1 nesnesi yorumlay�c� istemine verildi�i zaman eylemi meydana gelir. �bek i�inde tan�ml� olan i�lem sizin iste�inize ba�l� olarak karma��k veya basit olabilir. Daha sonraki makalelerde makrolar �zerinde daha �ok duraca��z. �u an i�in bu giri� bilgisi bizim amac�m�z i�in k�fi gelmektedir
(Al��t�rmalar)
Bu makaleden ba�layarak okuyucuya baz� al��t�rmalar verece�iz. Burdaki sorular�n cevaplar� bir sonraki makalede verilecektir.
G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Emre Demiralp "some rights reserved" see linuxfocus.org/license/ http://www.LinuxFocus.org |
�eviri bilgisi:
|
2004-11-23, generated by lfparser version 2.50