Lisp'i Anlamak

0
anonim
Fazlamesai'deki Lisp hayranları bunu nasıl atladı bilmiyorum ama digg.com'da rastladığım, biz ölümlülerin kullandığı sıradan programlama dilleriyle uğraşanların da anlayacağı bir dille yazılmış The Nature of Lisp başlıklı bu yazı, Lisp hakkında şimdiye kadar okuduklarımın toplamından daha fazla şeyi anlamamı sağladı.

Görüşler

0
FZ


Aman Naggum duymasın! ;-) Kendisi konuya şöyle giren bir adam olduğu için:

Basically XML is just another way of writing S-expr or Trees or whatever you want to call it.
They are not identical. The aspects you are willing to ignore are more important than the aspects you are willing to accept. Robbery is not just another way of making a living, rape is not just another way of satisfying basic human needs, torture is not just another way of interrogation. And XML is not just another way of writing S-exps. There are some things in life that you do not do if you want to be a moral being and feel proud of what you have accomplished.


Robbery, Rape, Torture and XML: Classic Naggum article on markup and s-exps.
0
FZ
Acaba insanlara önce XML, Java programlama (ya da C#) anlatıp, iyice anlamalarını bekleyip sonra mı Common Lisp ya da Scheme anlatsak? Arabayı atların önüne koymak dedikleri böyle bir şey olsa gerek ;-)
0
sky_khan72

Bence sorun düşündüğünüzün tam tersi. Lisp'i anlatabilmek için önce XML, C# vs öğretmek gerekmiyor. Kendimden bir örnek vererek anlatabilirim sanırım. İlkokulu gecekondu semtindeki 50 küsur kişilik sınıflarda okuduğum için öğretmenlerin teker teker öğrencilerle ilgilenme şansı yoktu. İlk yazmaya başladığımda kimse kalem nasıl tutulur göstermediği için, kalemi normal şekilde değil bütün parmaklarımla kavrayarak tutmaya alışmışım farkında olmadan, tabi bu şekilde tutunca iki satır yazı yazınca parmaklarım yoruluyordu. İnsanların kalemi benden farklı tuttuğunun farkına vardıktan sonra, normal şekilde tutmaya alışmak hiç bilmeyen birisinin öğrenmesinden daha uzun sürdü benim için. Programlamaya benim gibi C,Pascal vs ile başlamış birisi için Lisp'i anlamak için gereken zihin dönüşümünü veya linkini verdiğim yazıda yazarın dediği gibi aydınlanmayı yaşamak için alışkanlıklarınızdan vazgeçmeniz gerekiyor, sorun burda.

Yazıdan çevirerek alıntı yapıyorum. "Lisp'in doğasında zeki ve deneyimli programcıların anlamasını zorlaştıran birşey mi vardı ? Hayır, yoktu. Nihayetinde ben anlamıştım, ben anladıysam herkes anlayabilirdi. O zaman Lisp'i anlamayı bu kadar zorlaştıran neydi ? Cevap, böyle şeylerde her zaman olduğu gibi beklenmedikti. Tabi ki ! Birisine birşey öğretmek zaten bildikleri kavramlar üzerine daha gelişmiş kavramları inşa etmeyi gerektiriyordu. Eğer süreç ilginç kılınırsa ve konular doğru yolla anlatılırsa yeni kavramlar, anlaşılmalarını sağlayan asıl kavramlar kadar sezgisel hale geliyordu. Problem buydu. Meta programming, kod ve verinin aynı şekilde temsil edilmesi, kendi kendini değiştiren programlar, sahaya özgü mini diller; bu kavramlar için yapılan açıklamaların hiçbirisi insanlara tanıdık gelmiyordu. Nasıl anlamalarını beklerdim ki ! İnsanların açık örnekler istemeleri şaşırtıcı değildi. Marsça konuşsam da aynı şeydi."

Sonuç olarak , bazen Marsça konuştuğunuzun farkında olmuyorsunuz, insanlar anlamayınca da kızıyorsunuz. Bir de benzer şeyleri başka durumlarda ben de yaşadım. İnsanlar anlattığınız en basit şeyleri bile anlamayınca ister istemez "salak mıdır nedir, ne var bunda anlaşılmayacak" şeklinde şeyler geçiyor aklınızdan. Oysa anadilini iyi bilen bir insana başka bir dili öğretmek için "sizin kalem dediğiniz şeye İngilizce'de pencil denir" demeniz veya kalemi gösterip "This is a pencil" demeniz gerekiyor. İlk aşamada "pencil" ın İngilizce'de küçük resim fırçası anlamına da gelmesi beni ilgilendirmiyor. Elbette kalemin Türkçe'deki anlamı ve çağrışımları başka bir dil ile örtüşmeyecek, ama siz (pencil != kalem) diye düşünüp "kalemi unut, pencil başka birşey" derseniz insanlara üzerinde düşünebilecekleri/uğraşabilecekleri birşey vermemiş oluyorsunuz, üstelik yazdığınız şeyler Tao'cu koanlara benziyor, onların da yıllarca uğraşırsanız Nirvaya'ya ulaştırma potansiyelleri var belki ama, kaç kişi gözle görülür bir ilerleme kaydetmeden Nirvanaya ulaşmak için o kadar beklemeyi göze alır bilmiyorum. En azından ben o kadar sabırlı değilim.

Not: Linki gönderen benim, şifremi hatırlamadığım ve "Şifremi unuttum" un yanıtı uzun süre gelmediği için anonim olarak gönderdim.

0
bm
Cok tesekkur ederim bu yazi icin. Lisp hayrani kategorisine girmeye razi miyim bilemiyorum ama burada devamli yeni ogrenip memnun kalanlari "n'olur kendi tecrubenizi anlatin" diye taciz etmemin sebebi de soylediginiz sey. Insan kendisini karsisindakinin yerine koyamayabiliyor. Bu sadece yeni ogrendigi zamanlari unutmus olmaktan degil herkesin yapisi ve gecmisi farkli oldugu icin.

Size de ayni eziyeti edeyim: evvelce manasiz buldugunuz hangi kavram tam yerine oturdu bu yazi sayesinde? Bir iki kolay ornek akliniza geliyorsa yazabilir misiniz?

0
sky_khan72

Öncelikle henüz Lisp'e elimi sürmediğimi söylemeliyim. Ancak bu yazı Lisp'in neden diğer programlama dilleri ile aynı kategoriye girmediğini anlamam için bir fikir verdi ve şu alıntıların

Lisp programlanabilir bir programlama dilidir.

"Lisp is a programmable programming language."

- John Foderaro, CACM, September 1991

Lisp bir dil değil, bir inşaat malzemesidir.

"Lisp isn't a language, it's a building material."

- Alan Kay

(Kaynak : paulgraham.com/quotes.html)

işaret ettiği özelliğe Lispte nasıl ulaşıldığını ve neden aynı işlevselliğe diğer programlama dilleriyle ulaşılamadığını kestirebilmeme yardımcı oldu.

Maalesef henüz Lisp'e elini sürmemiş biri olarak ben de net örnekler veremiyeceğim, çünkü ben de henüz pratiğini yapmış değilim ancak ne anladığımı anlatmaya çalışayım.

Lispin gücü bir anlamda syntax'ının basitliğinden (veya syntax'ının olmamasından) kaynaklanıyor. Yani daha önce başka yerlerde insanların "Niye Lisp kodu derleyicilerin parse ettiği şekilde (AST = Abstract Syntax Tree = Soyut Sözdizim Ağacı) yazılıyor ki. Bu insanlar için doğal bişey değil" diye şikayet ettiklerini okuduğumu hatırlıyorum. İşte Lisp'in gücü tam da bundan kaynaklanıyor. Tabi burada önemli olan kodun AST şeklinde yazılması değil, bu sayede dilin sözdiziminin programcı tarafından kontrol edilebilmesi. Ancak bu sayede, Lisp'te program yazmaktan kurtulup derleyiciyi programlama aşamasına geçmiş oluyorsunuz. Yani Lisp'te yaptığınız iş program yazmak değil, diğer dillerdeki gibi bir kod yazıp bunu derleyicinin önüne atmıyorsunuz, Lisp'te derleyici ile konuşuyorsunuz.

Örneğin benzer işlevselliğe C++ ile ulaşmaya çalıştığınızı ve bu yüzden C++ derleyicisi ile yazdığınız kod içinden etkileşime girecek bir yöntem oluşturduğunuzu varsayalım. C++ derleyicisinin derleyip AST halinde tuttuğu kodu nasıl işleyeceksiniz ki, C++'nın, derleyici ile etkileşime geçerek bile değiştiremeyeceğiniz bir sürü sabit özelliği var, üstelik C++'nın sözdizimi bir sürü ayrıntı içerdiği için derleyicinin AST haline getirdiği ağaç üzerinde değişiklik yaparak kodu sizin istediğiniz başka bir şekilde ele almasını/derlemesini sağlamak C++ derleyicisini baştan yazmaktan çok da kolay olmaz.

Umarım benim yazdıklarım koanlardan daha anlaşılır olmuştur.

0
bm
Umarım benim yazdıklarım koanlardan daha anlaşılır olmuştur.

Baska yeni meraklananlar ne der? Bir de onlardan duysak birseyler?

Dediginiz seyler dogru seyler, yalniz bu propgramlanabilir programlama dili kismini yeni baslayanlara cok soyleyince bazen hemen programlama dili programlamaliymislar gibi oluyor. Bu da cok dogru degil, ozellikle hem lisp hem programlama hem genel bilgisayar bilimi gorgusu ayni adna edinmekte olanlar icin belki basladiklari yolda biraz yurudukten sonra dusunmeleri veya tesebbus etmeleri gereken seyler macrolar filan. Ayni sekilde CLOS'un gucu ve MOP da ancak islere biraz hakim olduktan sonra kiymeti anlasilabilecek seyler. Bunu biraz eksik soyluyoruz gibime geliyor.

0
Betelgeuse
Biraz eski bir yazıya yorum yapıp bunu yeniden canlandırmak gibi olacak ama FM sitesinde eski yazılara yorum ekleme öcelliği açık durduğu için kendimi suçlu hissetmiyorum. :))

Bu haberdeki yazıyı okudum ve daha önceleri yalnızca parantezler karmaşası ve birkaç geekin kendilerini eğlendirdikleri bir dil gözü ile bakıyordum LISP olayına. Programcılık öğrenmeye COBOL ile başlamış bir dinozor olarak bu yaştan sonra LISP mi öğrensem yoksa yeni yeni çıkmış başka neler var diye debelenip duruyorum, aslında amasım .NET ortamını öğrenmekten kaçınmak. .Net ortamından uzak durma inadım yüzünden hala 10 yıl önce çıkmış ortamlarda program yazıyorum (ASP) ve piyasada yazılmış program çalışıyorsa ve kullanıcının işini görüyorsa para kazandırıyor. Piyasa işi yani müşterinin veritabanları üzerinde çalışacak uygulamalar için web tabanlı uygulamalar destek rahatlığı açısından büyük kolaylık. Kuruyorsunuz bir web servisi, veritabanı sunucusu da şu adrestedir diye tanıtıyorsunuz iş bitiyor, nasıl olsa bütün bilgisayarlar artık bir web tarayıcı ile geliyor. Her bilgisayara tek tek program yükle vb. derdi kalmıyor. Böylece her bilgisayarın düğmesini açmayı unutan kullanıcılarına destek verme derdiniz de kalmıyor. :))
Neyse, konuya döneyim. Halihazırda ASP ve MS-SQL server kodları ile çok güzel yürüyen projelerimi sırf artık windows kullanmayayım diye PHP'ye adım adım çevirmeye başladım. Ama bir yandan da PHP bana aynı ASP kadar sıkıcı geliyor. Detayları dışında pek farkları yok.
Veritabanına bağlan, kullanıcıdan birtakım bilgileri al, veritabanındaki stored procedure parapetrelerine bunları yerleştir, veritabaında bunu çalıştır, çıkan sonucu göster vb. hep aynı aynı tekrar eden şeyler. Haliyle programcılıktan çok hammallık yapıyoruz aslında. Madem bu kadar sıkıcı bu işler, aynı işi LISP vb. gibi daha keyifli olduğu izlenimi edindiğim ortamlarda nasıl yapabilirim? Linux (kubuntu) kurulu bilgisayarıma neler yüklemem gerekiyor? web tabanlı olacağı için Apache web servisi yüklemem gerektiğini biliyorum ama bunu üzerinde çalışacak geliştirme ortamı vb için neler gerekiyor? Windows ortamında makinaya MS SQL server ve IIS yükleyince iş bitiyor, herhangi bir asp editöründe kodu yazıp herhangi bir web browserda da kodu test etmek yetiyor çoğu zaman. benzer şeyler için LISP'e nasıl bir başlangıç yapabilirim? Ya da LISP bu işler için işe yarar mı? LISP ile yapılmış örnek web uygulamaları var mı? ASP'de olduğu gibi html kodunun arasına lisp kodları mı yazılıyor? nasıl yapılıyor bu işler, hep teorik dokumanlara rastlıyorum ama biraz daha pratiğe yönelik dokuman bulamadım...
Madem ki bu FZ sitesi LISP, haskel vb. şeylerden bahsedip aklımızı çelmeye çalışıyor, biraz daha biz ölümlülerin de anlayabileceği dilden yazılmış yazılar da görelim bu sitede. :))
0
zekzekus
Lisp ile web programlama yapmak için çeşitli seçenekleriniz var.

Uncommon Web framework için güzel Türkçe bir belge:

http://people.core.gen.tr/~aycan.irican/web/publish/WebGelistirme.html

Franz Allegro Portable Server için bir başka güzel belge:

http://ileriseviye.org/arasayfa.php?inode=cl-web.html

Birde benim bildiğim K-pax isimli bir framework var(kendisi JSP tadında LSP(lisp server pages) sunuyor) onunla ilgili Türkçe bir kaynaktan haberim yok. Ama ingilizce sorununuz yoksa internetteki kaynaklar geröekten yeterli bu konuda.
0
tongucyumruk
Kilit nokta şu: Common Lisp için web geliştirme frameworkü geliştirmek o kadar kolay ki, bir sürü framework var. Bunların web programlamaya yaklaşımları da birbirinden son derece farklı. Bu nedenle yapmanız gerekenleri birkaç adımda özetleyebiliriz:

- Bir Common Lisp ortamı kurun
- Eğer daha önce hiç CL tecrübeniz olmadıysa biraz CL ile tanışın
- Bir web uygulama çerçevesi (framework) seçin
- Web uygulama çerçevesini yükleyin
- Web uygulama çerçevesini kullanmayı öğrenin

Web uygulama çerçevesi olarak seçenekleriniz oldukça fazla. birkaç örnek için aklıma gelenler:
Uncommon Web: http://common-lisp.net/project/ucw/
Hunchentoot: http://weitz.de/hunchentoot/
KPAX: http://homepage.mac.com/svc/kpax/
Allegro WebActions: http://opensource.franz.com/aserve/aserve-dist/webactions/doc/webactions.html

Bir de bunların yanında PHP, ASP ortamlarında yaptığınız klasik tarzda programlama yapmak, böylece geçişinizi kolaylaştırmak adına doğrudan AllegroServe (http://allegroserve.sourceforge.net/) üzerinde uygulama geliştirmeyi de tercih edebilirsiniz.
0
FZ
Arkadaşlar burada güzel cevaplar vermişler, eğer daha detaylı tartışmak, bilgi ve fikir alışverişinde bulunmak isterseniz sizi Türkçe Lisp e-posta listesine abone olmaya bekleriz. 2005 yılından beri birikmiş olan yazışmaların bulunduğu arşive de göz atabilirsiniz.
0
Betelgeuse
Mail listesine az önce üye oldum. Şimdi fırsat buldukça burada verilmiş linkleri ve o mail listesindeki arşivleri okuyayım. Şu anda LISP ile ilgili pek fikir sahibi değilim, saçma sorular sormadan önce biraz bilgi edineyim. Yardımcı olan herkese teşekkürler... FZ'yi de bir gün yolunu kesip kaçırmak ve madem o kadar aklımızı çeldin, göster bakalım nasılmış bu işler demek lazım. :)))
0
FZ
Ben sadece birkaç çeviri yaptım, birkaç yazı yazdım biraz da sağda solda gevezelik ettim. Akıl çelmek bu kadar kolay mıymış? :)

Bu arada deneyimli bir ASPci ile karşılaşmak güzel, o hamallık diye tabir ettiğiniz şeyin, o ruh halinin ne olduğunu gayet iyi biliyorum yaklaşık 7 sene ASP ile uğraşmış biri olarak :)
Görüş belirtmek için giriş yapın...

İlgili Yazılar

Lisp Resource Kit: Canlı Canlı Lisp ;-)

FZ

LispNYC ve ALU tarafından geliştirilmiş olan The Lisp Resource Kit boot edebilen Debian GNU/Linux tabanlı Knoppix kullanılarak hazırlanmış bir Lisp tanıtım, eğitim öğretim CDsi. Her türlü deneyimden insana Common Lisp programlama dilini ve teknolojilerini tanıtmak amacı ile hazırlanmış ve ekran görüntülerine buradan ulaşabileceğiniz bu CDdeki yazılımların birkaçına örnek vermek gerekirse:

Guy Steele'den John McCarthy röportaj

auselen

Guy Steele OOPSLA 2008'de Lisp'in babası John McCarthy ile bir telefon röportajı gerçekleştirdi.

Pascal Costanza'nın Çok Dik Başlı Lisp Rehberi

FZ

Uzunca uğraşlardan sonra Pascal Costanza'nın dik başlı (!) Lisp kılavuzunu Bilkent Bilg. Müh. bölümü öğrencilerinden Hayrettin Gürkök'ün çevirisi ile anadilimizde yayımlama imkanına kavuştuk. AOP yani Aspect Oriented Programlama mefhumunu Common Lisp'e kazandırmış olan (ya da Debiancılar için: Debian aspectl paketleri) Costanza'nın bu yazısının Lisp heveslilerinin işine yarayacağını ümit ediyoruz.

Çevirinin özgün adresi http://ileriseviye.org/arasayfa.php?inode=costanza-lisp-guide.html'dir. Emeği geçen herkesin eline sağlık. Afiyet olsun...

Common Lisp ile Oyun Programlama

FZ

Frank Buss, Common Lisp kullanarak Aqueaduct isimli bir mantık bulmaca oyunu (puzzle) geliştirmiş.

Bir grafik kullanıcı arayüzü de olan oyun MS Windows, GNU/Linux ve Mac OS X ortamlarında (kodda bir değişiklik gerektirmeden) çalışabiliyor. Kaynak kodu meraklısı için öğretici olabilir.

PL/scheme: PostgreSQL için Scheme

FZ

cs-lisp e-posta listesinde Volkan Yazıcı tarafından geliştirilen PL/scheme projesinin duyurusu bugün yapıldı.