RSS

Sharpdot? #.? Ne diyorsun kardeşim Türkçe konuşsana!

03 Jun

Gün geçmiyor ki insan yeni bir şeyler öğrenmesin. Söz konusu programlama ve özellikle Common Lisp gibi büyük ve köklü bir dil ise bu özellikle böyle.

Usenet’teki comp.lang.lisp grubundaki bir mesaj gözüme takıldı bugün. Meğer #. diye bir şey varmış, meğer Sharpsign Dot diye okunuyormuş, meğer ne acayip bir özellikmiş.

Evrensel soru kulaklarda çınlar: Gerçek hayatta ne işimize yarayacak bu özellik?

Kısaca: Bu sembol Lisp “reader” mekanizması tarafından sunulan bir özelliktir. Bu işaret sayesinde okuduğunuz karakter dizisi Lisp tarafından okuma esnasında değerlendirilir ve çıkan değer yerine yerleştirilir. Böylece düz bir metin içine istediğiniz karmaşıklıkta bir Lisp ifadesi yerleştirebilir ve başına #. getirmek sureti ile o kısmın değerlendirilmesini sağlayabilirsiniz. Karakter dizileri ve her türlü dosya, “stream”, vs. okuma işleminde bundan faydalanabilirsiniz.

Örnek:


CL-USER>  (read-from-string "(1 3 5 #.(* 10 pi))")
(1 3 5 31.41592653589793d0)
19

CL-USER> (read-from-string "('siradan-bir-metin
                             'baska-bir-girdi
                              (+ 1 1)
                             'ozel-duruma-hazirlan
                             #.(* 10 pi)
                             'hurraa)")

('SIRADAN-BIR-METIN 'BASKA-BIR-GIRDI (+ 1 1) 'OZEL-DURUMA-HAZIRLAN 31.41592653589793d0 'HURRAA)

Tabii birazcık Scheme ya da Common Lisp ile uğraşmış olanların tepkisi “iyi de bu eval gibi bir şey değil mi?” oluyor. Çok benzer olmakla birlikte herhangi bir Lisp ile alakasız akış, karakter katarı, dosya, vs. içine “tam da şu işaretlediğim yeri Lisp kodu olarak değerlendirip değerini buraya yerleştir okuyup yorumlarken” diyebilme imkanı kaydadeğer, takdire şayan bir özellik.

Advertisements
 
Leave a comment

Posted by on June 3, 2006 in General, Lisp, Programlama

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: