RSS

Lisp ve Özgürlük – Şafak Reloaded

11 Aug

Lisp ve Özgürlük üstüne sevgili tonguc biraderim “Şafak kaç? (Haskell version)” şeklinde bir çıkış yapınca basit Lisp koduna müdahale etmek farz oldu ve bir şeyler daha karaladım.

Common Lisp’in format fonksiyonunu biraz eğip bükmek remaining-safak kodunun belli bir noktaya gelmesini sağladı. Bunun ardından kodu comp.lang.lisp canavarlarına yollayıp “bunu nasıl daha sade ve güzel yazabiliriz yeniden?” diye sorunca Pascal J. Bourguignon‘dan her zamanki gibi şık ve güzel soyutlamaları içeren bir cevap geldi, üstad bununla yetinmemiş bir de Maya takvimine göre şafak hesaplayan kodu da eklemiş:


CL-USER> (format-decomposed-value (time-interval-to-components (remaining-safak))
 *time-bases-names*)
"1 month, 5 days, 5 hours, 4 minutes, 40 seconds. "

CL-USER> (define-base-decomposer decode-mayan-date '(60 60 24 20 18 20 20))
DECODE-MAYAN-DATE

CL-USER> (format-decomposed-value (decode-mayan-date (get-universal-time))
                         '("second""minute""hour""K'in""Winal""Tun""K'atun""B'ak'tun"))
"5 K'atuns, 10 Tuns, 3 Winals, 9 K'ins, 15 hours, 58 minutes, 11 seconds. "

Tabii bu arada Volkan Yazıcı’nın da çözümünü gözardı etmemek lazım 😉

Bunlar olup biterken Türk ordusunda Common Lisp ve Haskell programcıları bulunmasından ötürü şaşırıp gaza gelen bir reddit okuru da tonguc’un Haskell çözümü üzerine “point-free” ve “do notation” yaklaşımlarını kıyaslayan iki Haskell çeşitlemesi gönderdi bu tema üstüne.

Not: Bu blog girdisi şu anda askerliğini Çorum askerlik dairesinde yapan ve Amasya’daki acemiliğimizde yan ranzamda yatarken bir akşam vakti bana Paul Graham’ın “Hackers and Painter” kitabının Türkçe çevirisini gösteren, Lisp ile ilgilendiğini belirten programcı dostum Hayri KILIÇ’a ithaf olunur. Arz ederim! 🙂

Advertisements
 

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: