Basitlik ve temizlik arasında bir denge, çekici özellikler ve ilginç ve faydalı yazılımlar (kendinize) yazmanıza ve ayrıca bir öğrenme aracı olarak hizmet etmenize olanak tanıyan bir platform aramak istiyorsunuz. (Bu sonuncu, daha uzun süre devam etmenizi ve öğrenmenizi sağlayacaktır.) İşte bazı olasılıklar:
Şema. Muhtemelen tüm lehçelerin en temizidir. The Little Schemer'ın LISP'den Scheme'ye neden çevrildiğine şüphe yok . Beşinci Şema standart özelliği, R5RS , kendi başına harika bir eğitimdir; şimdiye kadar okuduğum en güzel dil ve kütüphane spesifikasyonu ve aynı zamanda makul ölçüde kapsamlı olan en kısası olabilir. PLT Scheme (şimdi Raket) platformu, oldukça iyi tercüman ve derleyici içerir komut dosyası için iyidir ve ayrıca öğrenme için mükemmel kılan bazı görsel araçlara sahiptir.
Common Lisp. Muhtemelen en taşınabilir ve kapsamlı değişken, ticari yazılım gibi şeyler yazmak istiyorsanız, büyük olasılıkla istediğiniz şey budur. Standart, kapsamlı kitaplıkları tanımlar ve bunun ötesinde çok daha fazlası mevcuttur, CLOS'a sahiptir , bu muhtemelen size OO hakkında herhangi bir OO dilinden daha fazlasını öğretecektir ve bazı derleyiciler çok iyidir. Dezavantajları, Scheme'nin sahip olmadığı bazı siğillerdir (işlevlere atıfta bulunan değişkenler için ayrı bir ad alanına sahip olmak gibi), temiz ve basit olmamak (uzantılara sahip olması ve ödünleri gerekli kılması gereken her şeyde olduğu gibi) gerçek dünyadaki büyük uygulamalar için), hijyenik makrolara sahip olmamak ve tekrarlamayı Scheme'den çok daha az vurgulamak.
Clojure.Bu, JVM üzerinde çalışır ve Java geliştiricileri için bir avantaj sağlayabilir. Birkaç siğil var (örneğin, kuyruk arama optimizasyonunu açıkça istemelisiniz, ancak bu, JVM'ye TCO eklenirse bir gün değişebilir). Makrolar, hijyenik olmamakla birlikte, değişken yakalamadan kaçınmanıza yardımcı olacak bazı özelliklere sahiptir, böylece CL'de olduğundan daha az kazara yapma riski ile birlikte, gerçekten isterseniz değişkenleri yakalayabilirsiniz. Tüm Java kitaplıklarına kolayca erişebilirsiniz; bu muhtemelen "gerçek dünya" kodu için iyi bir şey ve öğrenme açısından oldukça anlamsız. Kalıcı veri yapıları için bir dizi kitaplık ve STM desteği var, bu da onu eşzamanlı bir bakış açısından çok ilginç kılıyor; bu muhtemelen en iyi bahsinizdir. eşzamanlı ve paralel programlamayla ilgili yeni yöntemler hakkında daha fazla bilgi edinmekle ilgilenir. Görünüşe göre Clojure, Java gibi büyük üretim uygulamaları için kullanılabilir, yani üretim uygulamalarında yapmak istemediğiniz ve yapmadığınız "çirkin şeyleri" yapma yeteneğine sahip olacak. öğrenirken.
Emacs Lisp. LISP açısından bu, oradaki en iyi örneklerden biri değil. En büyük hatalarından biri dinamik kapsam belirlemedir, ancak başka birçok hata da vardır. Ancak, bir Emacs kullanıcısıysanız, bu, editör kullanımınızı geliştirmek için öğrenebileceğiniz en güçlü araç olabilir. Emacs Lisp'i öğrenerek ne kadar öğreneceğiniz, Emacs'ı nasıl genişleteceğin ötesinde, benim için açık bir sorudur ancak; Emacs Lisp'te yüksek dereceli fonksiyonlar gibi ilginç tekniklerin ne sıklıkla kullanıldığını bilmiyorum.
2018 Güncellemesi
Bu yazıyı yazdığımdan bu yana neredeyse on yıl geçti ve Lisp dil ailesi artık genel programcı bilincinde önemli bir ilgi görüyor gibi görünüyor. Bunun çoğu, kendi başına Lisp'in tamamen ayrı bir lehçesi haline gelmekle kalmayıp, kendi iyi fikirlerinin çoğunu tanıtmakla kalmayıp, aynı zamanda şimdi JavaScript'i hedefleyen neredeyse aynı bir versiyona sahip olan ve diğer birçok Lisp'e ilham veren Clojure ile ilgili gibi görünüyor. diğer platformları hedeflemek. Örneğin, Hy , önce Python ile birlikte çalışabilirliği hedefleyen, ancak "şüpheye düştüğünde" Clojure fikirlerini kullanarak CPython AST ve bayt kodunu hedefler. (En son kayıtlara göre ikincisi biraz değişiyor olabilir.)
Bunun karar verme sürecinizde getirdiği büyük değişiklik, Lisps veya Lisp benzeri diller için mevcut olan her şeye de bakmanız ve Perl , Ruby , Erlang , Go veya hatta kullanmakta olduğunuz diller veya platformlarla birlikte çalışmanız gerektiğidir. Mikrodenetleyicilerde C ++ .