mm-o-metre...

28 November 04, Sunday @ 21:09

Geçen hafta bayram nedeniyle yayınlanmayan metrem, bazı ufak geliştirmeler ile yeniden karşınızda.


Be the first one to comment...

08 November 04, Monday @ 01:51

Nihayet beklediğim kitap geldi. Knuth amcadan Digital Typography. TeX ve metafontu nasıl geliştirdiğini, kullandığı algoritmaları, rönesans sanatçılarının çizdiği fontları inceleyip computer modern font serisini nasıl yarattığını eğlenceli bir şekilde anlatıyor.

LKD gezegeninde dönen lisp muhabbetinde bi nokta gözden kaçmış. Lisp makrolarının olayı kod üretebilmeleri değil. Lispte herhangi bir fonksiyon da kod üretebiliyor ve bu noktada sentaks dışında Python ve benzerleri ile pek bi farkı yok, değişen ne? bi markası.

Makroların öne çıktığı nokta fonksiyonların yapamadığı bir iş olan parametrelerin işlenmesini denetleyebilmeleri. Bi örnek:

(defmacro Nand (&rest Args)
'(not (and ,@Args)))

Nand bildiğimiz not and işlemini yapıyor, bu makroya çok sayıda parametre verdiğimizde parametrelerden biri false döndürdüğü anda işlem kesilecektir. Burda yaptığı iş kodu bir dizi and ve bir not çağrısı ile değiştirmek zaten.

Aynı şekilde (condition true-action false-action) gibi bir parametre dizisi alıp duruma göre action'lardan sadece birini işleten bi makro yazılabilir.

Python'da makro yok diyorlar, böyle bişi yapmak mümkün mü bilemiyorum, Python bilgim döküman falan okumadan interaktif modda kurcalamaya dayanıyor, şöyle bişi denedim:

>>> def a():
... print "*"
... return None
>>> print a() and a() and a()
*
None
>>> def b():
... return lambda x,y,z: x and y and z
>>> c = b()
>>> print c (a(), a(), a())
*
*
*
None

Peki parametreler üzerindeki bu metin düzeyinde kontrol ne işe yarıyor derseniz, dile yeni yapılar eklemeye tabi. Değişik kontrol (if vb) ya da döngü (for, while) yapılarını dilin sentaksına dahil etmek kolaylaşıyor.

Lisp mantığında dil problemin kavramlarını taşıyacak şekilde geliştirilerek alttan yukarı gidildiği ve design patterns benzeri yaklaşımlar kullanıldığı için makrolar pek seviliyor.

Tabi her abartılan şey gibi makrolar da programlamada devrim getirecek, olmazı olur kılacak, açları doyuracak falan değil. Bi kolaylık işte.


Be the first one to comment...
2004 December 2004 October