it-swarm-tr.com

LISP bugünün dünyasında hala faydalı mı? En çok hangi sürüm kullanılıyor?

Kendime düzenli aralıklarla yeni bir programlama dili öğretmeye çalışıyorum. Son zamanlarda, LISP ve lehçelerinin spektrumun tam karşı ucunda, C/C++ gibi dillerden nasıl olduğunu daha fazla okudum, bu da beni daha fazla bilmeme neden oldu. Ancak, iki şey benim için belirsiz ve ben onlara rehberlik ediyorum:

  1. LISP günümüz dünyasında hala uygulanmakta/kullanılmaktadır ya da FORTRAN/COBOL gibi eski bir dil midir? Yani, mevcut kodun korunmasının yanı sıra, yeni projelerde de kullanılıyor mu?

  2. En yaygın kullanılan lehçe nedir? Şema ve Common LISP ile en yaygın 2 lehçe olarak karşılaştım ve hangisinin öğrenilmesi için en çok tercih edilen/yararlı olan olduğu fikrinizi istedim - ve bir seviyeye yeni başlayanlar için herhangi bir kaynak önerebilirseniz son derece memnun olurum.

Alıştığım prosedürel dillerden temel olarak farklı bir dili öğrenmeye istekli olsa da, tamamen eskimiş bir şeye gereksiz çaba harcamak istemiyorum - profesyonelce "ölü" olsaydı hala öğrenirdim, ama sadece akademik bir bakış açısıyla ...

116
TCSGrad

Şemayı seviyorum, eğer JVM ile çalışmak istiyorsanız, JVM'de çalışmak için tasarlanmış bir LISP olan Clojure'a göz atmalısınız. Ve evet LISP hala böyle minimal bir tasarımın ne kadar güçlü olabileceğini görmeye değer! LISP'yi yaratan insanlar bazı şeyleri gerçekten doğru buldular. 1960'larda LISP'nin modern dillerinin havalı yeni özelliklerinden kaç tanesi inanılmaz!

Gömülü bir plan için guile deneyin: http://www.gnu.org/s/guile/

59
Zachary K

2. soruya yanıt olarak, "En yaygın kullanılan lehçe":

"En çok kullanılanlar" ı nasıl yorumladığınıza bağlıdır. İşte seçilen birkaç lehçenin her birinin ne kadar kullanıldığına dair alt sınırlar için bazı peçete matematiği.

En çok yazılan ham kod

  • Muhtemelen Şema (tüm lehçeler) çünkü eğitim uygulamalar
    • 270 okul ... Sanırım 50 öğrenci/yıl, 500 satır kod/öğrenci, 10 yıl çalışıyor. Peçete matematiğine dayalı 1.000.000+ satır .
    • Raketin kendisinde ve aletlerinde 500.000 hat Raket.
  • AI ve bir sürü açık kaynak kodu ve üretim kodu nedeniyle Yaygın LISP (Bkz. Üretim kodu).
  • Muhtemelen LISP'den Emacs ...
    • Emacs'ın kendisi: 1.000.000 satırın üzerinde
    • Halka açık emacs LISP - 237 modül, yaklaşık 200 satır/modül miktarı 40.000 + sadece EmacsWiki'de, muhtemelen ELPA'da çok daha fazladır
    • Ayrıca emacs LISP, .emacs dosyaları vb. İle yazılmış uygulamalar.
  • Clojure
    • Tahmin etmesi zor. Çoğunlukla daha küçük dotcom'lar. Çok olabilir.

Kazanan: Şema veya Ortak LISP. Çok fazla bilinmeyen.

Çoğu 'üretim' kodu

Kazanan: Sanırım Ortak LISP . Ortak LISP ve Clojure kullanımına dayalı olarak 1. soruya "Evet" cevabını verebileceğimizi düşünüyorum.

Çoğu son kullanıcı

  • Yaygın LISP
    • Orbitz, Bing Travel ve Kayak.com dahil ITA Yazılım müşterileri - Muhtemelen milyonlarca.
  • Clojure
    • Citigroup (detay yok), Akamai (detay yok), simple.com, diğerleri. Muhtemelen milyonlarca.
  • Şema
    • CS öğrencileri, araştırmacılar ve hobiler. Bazilyondan az.
    • Uncharted serisi - 5 milyondan fazla
  • Emacs LISP - Çoğunlukla unix platformlarında çoğunlukla programcılar. Bir milyon olabilir.

Kazanan: Şema Uncharted'da satış numaraları olduğu için burada en iyi alt sınır var, ancak oldukça tartışmalı.

Sonuç

Sonuç olarak, büyük elmaları buluyorum.

68
Jesse Millikan

LISP günümüz dünyasında hala uygulanıyor/kullanılıyor mu yoksa eski bir dil mi

Evet, öyle, ama nereye bakacağını bilmelisin. LISP kullanan insanlar bu konuda çok yüksek sesle bağırmaya eğilimli değiller, ancak son 20 yılda büyük bir etki yaratan birkaç yüksek profilli girişimin birkaç örneği var. Avrupa'daki küçük şirketler arasında da çok popüler.

En yaygın kullanılan lehçe nedir?

Bu geçerli bir soru, ancak cevaplaması kolay bir soru değil. Cevaplamak için özellikle yararlı olmayabilir: birçok uygulamanın belirli bir odağı vardır, bu nedenle aksi takdirde ne kadar yaygın olarak kullanıldığından ziyade özel sorununuza uyuyorlarsa en iyi şekilde seçilirler. Bunun yerine, size seçeneklerinizden biraz bahsedeceğim ve kendiniz karar verebilirsiniz.

LISP bir dil ailesidir ve bu dillerin her birinde bir lehçe ve uygulama ailesi vardır. Geniş ağızlar iki kampa "LISP'ler" ve "Şemalar" a düşmektedir.

LISP'ler: Nispeten yakın zamana kadar Common LISP kraldı. Bu, tüm farklı LISP'leri birleştirme girişimiydi ve kaba olmadan LISP'nin "C++" idi. Yani, ÇOK BÜYÜK bir dildi. Her şeye sahipti. Son birkaç yılda Clojure ortaya çıktı. Clojure, Java Sanal Makine üzerinde çalışan ve kendisini fonksiyonel bir programlama felsefesine dayanmaya çalışan bir LISP'dir. Geleneksel olarak, diğer LISP'ler kesinlikle çok paradigmaya sahiptir. hem LISP hem de JVM için çok iyi ve çok kötü.Java tabanlı dillerin ayrıntı düzeyi hala çok fazla ve sözdizimi ile oldukça ücretsiz ve kolay oldu, bu yüzden farklı şeyler için çok sayıda düğme ve düğme var, ancak bunlar Veri tipleri hakkında bazı gerçekten ilginç fikirler aldım, özellikle de işlevsel programlamanın fikirlerini uygulamak için buldukları pratik yollardan bazıları.

Şemalar: Şemalar, LISP'lerin katı bir alt kümesidir. Şema Steele ve Sussman tarafından icat edildi ve erken yaşamda MIT Computing 101 Ders Kursunda) kullanıldıkları dikkate değerdi. Şema “Algoritmik Dil Şeması (RnRS Hakkında Revize ^ n Raporu) ) "Evet: orada bir matematik şakası var. Şema, diğer LISP'lerin olmayacağı şekilde standartlaştırılmış bir dildir. Bu, uygulamalar arasında taşınabilirliğe büyük ölçüde yardımcı olur, ancak gümüş bir kurşun değildir. Standartlaştırma çabaları muhafazakar olma eğilimindedir ve özellikle modüller gibi şeyler çevresindeki uygulamalardaki yenilikler birbirinden farklı olma eğilimindedir, ayrıca IETF'nin RFC sürecine benzeyen bir dizi SRFI (Uygulama Şeması Talepleri) bulunmaktadır.

Şemalar LISP'lerden farklıdırlar ve yerine getirmeleri gereken bir dizi zor gereksinime sahiptirler, bunlardan biri özyinelemeyi etkili kılan "kuyruk çağrısı optimizasyonu" dır. Bu nedenle, tekrarlayan programlama stilleri Şema'da LISP'den çok daha popülerdir. Şema, aynı zamanda kaba olmayan, LISP'in "C" si gibi. Yani, küçük bir dil ve hepsini bir anda kafanızda tutabiliyor olmalısınız.

Şu anda iki Şema ailesi vardır: 5. versiyona (R5RS) ve 6. versiyona (R6RS) dayalı olanlar. R6RS'nin karmaşıklığı öncekilerden çok daha büyüktü ve birçok R5RS uygulaması, R7RS'nin R6RS'ye R6RS'den daha benzer olacağını umarak atlamayı seçti. R7RS standardizasyon süreci şu anda devam etmekte ve ilk çalışma gruplarında küçük bir temel dili standartlaştırarak ve ardından daha büyük özellikleri standartlaştırmak için ikinci bir çalışma grubunu devreye alarak hem R5RS uygulayıcılarının isteklerini hem de R6RS halkının isteklerini dahil etmeye çalışmıştır. Bu, dilin hem küçük gömülü donanım hem de daha yetenekli makineler üzerinde etkili ve kullanışlı uygulamalara sahip olmasını sağlayacaktır.

Şimdi daha spesifik olacağım:

PicoLisp gerçekten, gerçekten harika bir LISP. Çok küçük! Yazarı kendisi için yazdı ve anladığım kadarıyla, 1980'lerden beri geçimini sağlıyor. Onunla bir konuşmaya katılma şansı yakalarsanız, o zaman yapmalısınız: o gerçekten ilginç ve eşyalarını gerçekten biliyor ve ana akım veya sıkıcı bir şeyin en küçük kokusunu bile alamayacaksınız.

Ortak LISP uygulamalarına aşina değilim, bu yüzden onlar hakkında daha fazla yorum yapmayacağım.

Guile resmi GNU Şeması).

Raket bir R6RS şemasıdır ancak son zamanlarda ağı genişletmiş gibi görünmektedir ve “dil yaratma, tasarım ve uygulama için bir platform görevi görmeye” çalışmaktadır.

Tavuk pratik bir plan olmayı amaçlamaktadır. R5RS'ye dayanır ve C'ye kadar derler. Bu, mevcut C kitaplıklarını kullanmayı kesinlikle önemsiz hale getirdiği için gerçekten, gerçekten önemli bir avantajdır. Bu nedenle Tavuk, günlük betik diliniz olarak Perl, Python, Ruby, vb.Yeni değiştirmek için muhtemelen en yararlı şemadır. Birkaç yıldır tüm ihtiyaçları için özel olarak kullanan birkaç kişi var. Etkileşimli bir REPL yanı sıra bir derleyici vardır. Topluluk (hem posta listesinde hem de IRC) bilgili, samimi ve yararlı.

Çok sayıda modüle sahip bir uygulama arayın: bu yaygın olarak kullanılabilir olduğunu ve eldeki göreve yardımcı olacak bir şeye sahip olacağı anlamına gelir.

Derleyici içeren bir uygulama veya en azından kesin olarak IDE veya REPL tabanlı olmayan) bir şey arayın. öğretmenin genel amaçlı betik için kullanımı çok zordur.

Ne kullandığım gibi tavuk tavsiye ederim. Kişisel projelerimde kullandım ve profesyonel olarak kullandım (ve şu anda kullanıyorum).

Tamamen eskimiş bir şeye gereksiz çaba harcamak istemiyorum - profesyonelce "ölü" olsaydı hala öğrenirdim, ama sadece akademik bir bakış açısıyla ...

Şema profesyonel olarak ölmedi, ancak bu bağlamda kullanmak için bazı uzunluklara gitmeniz gerekebilir. Tavuk gibi bir şey akademik bir arayıştan çok daha fazlasıdır ve şu anda kullandığınız üst düzey dillerin neredeyse tüm temellerini kolayca kapsayabilir.

43
andyjpb

Gerçekten tüm Lisps için konuşamıyor ama Clojure kesinlikle şu anda sıcak ve alakalı bir dildir. Bu haftanın başında gittiğim Londra Clojure Kullanıcı Grubu'nda 100'den fazla katılımcı vardı ....

Ben geçen yıl Clojure şeklinde LISP öğrenmek için çok aydınlatıcı bir deneyim buldum (Java ve C #) ile çok deneyim sonra.

  • fonksiyonel programlama (diğer Lisps'lerin çoğundan daha fazla) üzerinde oldukça güçlü bir vurgu vardır. Yazar ve BDFL Rich Hickey, Haskell'i dil tasarımı için ilhamlarından biri olarak gösterdi, bu da tamamen değişmez veri yapıları ve tembel sonsuz diziler vb.
  • Makro meta programlaması - LISP "kodu verilerdir" felsefesi gerçekten deneyimlediğiniz sürece anlaşılması zordur, ancak Lisps'in böyle olmasının nedenlerinden biridir etkileyici ve üretken
  • çok çekirdekli eşzamanlılık için harika destek - Aslında Clojure'un şu anda eşzamanlı programlama için dil en iyisi dil olduğunu düşünüyorum. Bununla ilgili aydınlatıcı bir sunum için http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey adresine bakın.

Aşağıdaki nedenlerden dolayı gerçek üretim kullanımı için de pratik bir seçim gibi görünüyor:

  • JVM üzerinde çok kolay çalışan Java interoperabilitiy, Java ekosistemindeki tüm kütüphanelere ve araçlara erişmenizi sağlar
  • Varsayılan olarak dinamik bir dildir , bu da neredeyse hiç kazan plakası ile geliştirme ve hızlı prototipleme için çok uygun hale getirir. Bununla birlikte, ihtiyacınız olan yerde oldukça iyi performans elde etmek için statik tip ipuçları ekleyebilirsiniz.

Şahsen Clojure'u birkaç yatırım bankasında ve girişimde kullanan insanları tanıyorum. Clojure'u kendi girişimim için birincil geliştirme dili olarak seçtim, bu yüzden paramı ağzımın olduğu yere koymaya hazırım :-)

27
mikera

Şu anda LISP de öğreniyorum (ve seviyorum). Ortak LISP kullanıyorum ama aynı zamanda SBCL , Arc (not, Paul Graham'ın LISP versiyonu olan, Vitor Braga tarafından belirtildiği gibi Yahoo mağazası/Viaweb) ve Allegro CL LISP için Visual Studio'ya benzer (GUI'ler oluşturabilir, ancak hiç kullanmadım).

Kullanımlara gelince, LISP Yapay Zeka'da çok kullanıldı, ancak dürüst olacağım, LISP için başka kaç "genel" kullandığından emin değilim. LISP'de inşa edilen web sitelerinin birçoğu başlangıçta diğer dillerde yeniden yazılmıştır, bu yüzden web geliştirmede kullanıldığını söylemek zordur (olmadığını söylemez, ancak onu kullanan daha büyük siteler artık ). Hızlı bir arama yaptıktan sonra (çok hızlı), Wikipedia adresinden Common LISP ile yazılmış yazılımların bir listesi.

[EDIT] LISP'i profesyonel olarak kullanmaya gelince, orada LISP kullanmanız gereken işler var. Diyelim ki Java veya C # işleri) kadar çok değiller, ama varlar.LISP, dahili uygulamalar için kullanılan ve şirketlerin sunduğu rekabet avantajı sağlayabilecek dillerden biri olduğunu düşünüyorum. LISP kullandıklarını ilan ederek vazgeçmek istemiyorum P.SE'de Smalltalk'in finansal arenada benzer olduğunu belirten bir yazı gördüğümü hatırlıyorum.

Ayrıca, farklı paradigmaları öğrenebildiğinizi gösterebilmeniz, işte LISP kullanmasanız bile daha fazla kapı açabilir.

"LISP, sonunda elde ettiğinizde yaşayacağınız derin Aydınlanma deneyimi için öğrenmeye değer; bu deneyim, LISP'nin kendisini çok fazla kullanmasanız bile, geri kalan günleriniz için sizi daha iyi bir programcı yapacaktır." - Eric Raymond, "Nasıl Hacker Olunur"

[/DÜZENLE]

9
Jetti

Bugün LISP öğrenmek istiyorsanız, ya hızlı bir şema uygulaması olan rakete bir göz atarım (aslında, şemadan biraz ayrıldı, bu yüzden şimdi kendi lehçesi bu) ya da clojure, JVM çalışır (bu yüzden kütüphanelerin ciroları mevcuttur, ayrıca kendi Java kodu) ile etkileşime girmesini sağlayabilirsiniz.

Bunu gerçekten kullanmayı öğrenmeseniz bile, öğrenmek her zaman faydalıdır: zihninizi bir süreliğine LISP'nin etrafına sardıktan sonra, diğer dillerde bile, problemleri düşünmenin ve bunlarla başa çıkmanın yeni yollarını öğrenirsiniz.

8
Fabien

Amazon arka ucunun önemli bir kısmı LISP'deydi ancak şimdi C++ ile yeniden yazıldı ya da duydum (bunun için güvenilir bir kaynağım olmadığını itiraf etmeliyim).

Yahoo! Mağazalar, LISP web uygulamalarının klasik örneklerinden biridir. Yahoo! Duymuş olabileceğiniz şöhret Paul Graham . Graham, en iyi bilinen LISP savunucularından biridir ve bu konuda kapsamlı bir şekilde yazmaktadır. Kendi puanını bilmek için sitesini okumak isteyebilirsiniz.

AutoCAD, makro sistemi için bir LISP lehçesine sahipti. Hala devam edip etmediğini bilmiyorum.

Şema temiz bir dildir ve çok zariftir. Muhtemelen en sevdiğim programlama dilidir, bu yüzden taraflı olabilirim. Şimdi büyük bir uygulama yazacak olsaydım, muhtemelen C'de bir iskelet uygulaması yazardım, Şemadaki iş kurallarını genişletip tanımlardım. Bu, Şema kullanmamı ve hız için ve neredeyse her şey için kütüphanelerin tam kullanılabilirliği için C'den yararlanmamı sağlıyor.

7
Vitor Py

LISP günümüz dünyasında hala uygulanmakta/kullanılmaktadır ya da FORTRAN/COBOL gibi eski bir dil midir? Yani, mevcut kodun korunmasının yanı sıra, yeni projelerde de kullanılıyor mu?

Silikon Vadisi'ndeki bazı girişimlerde Lisps yapan birkaç adam tanıyorum ve Amazon.com'un en başından beri LISP kullandığını biliyorum (bir nedenden dolayı C++ ile değiştirdiklerini duydum?)

Ama göz kulak olacak bir şirket Yaramaz Köpek . Tüm oyunları bir LISP lehçesi ile yazılmıştır. Başlangıçta, kendi rulolarını yuvarladılar, ancak Uncharted serisinde MZScheme kullanıyorlar.

En yaygın kullanılan lehçe nedir? Şema ve Common LISP ile en yaygın 2 lehçe olarak karşılaştım ve hangisinin öğrenilmesi için en çok tercih edilen/yararlı olan olduğu fikrinizi istedim - ve bir seviyeye yeni başlayanlar için herhangi bir kaynak önerebilirseniz son derece memnun olurum.

Common LISP, Clojure, Scheme ve Emacs LISP'nin en yaygın kullanılan dört lehçe olduğundan bahsetmek isterim ve bunlardan Şema'nın en yaygın şekilde konuşlandırıldığından şüphelenirim. Elbette bunu destekleyecek hiçbir şeyim yok. :)

Ben başkaları tarafından önerilen SICP ve Küçük Schemer gibi, ama ben de tavsiye ederim LISP Land , oldukça eğlenceli bir okuma. :)

4
greyfade

Kısmen bununla ne yapmak istediğinize bağlı olduğunu düşünüyorum - eğer çeşitli programlama kavramlarına dair görüşlerinizi ilerletmek ve kendinizi daha iyi bir programcı yapmak istiyorsanız, o zaman en azından bir LISP modülünü öğrenmeye değer olduğunu söyleyebilirim. Bu dilde bir iş bulmak için özgeçmişinize eklemek için başka bir dil arıyorsanız, muhtemelen başka bir yere bakmak istersiniz. Orada çok fazla LISP işi yok.

Ben şahsen ya SBCL ya da daha yakın zamanda Clojure (ve bazı Emacs LISP, ama htat's uzun vadeli Emacs kullanıcı olduğum için kullanmayı deneyin - LISP öğrenmeye çalışırken Emacs LISP öğrenmeye çalışacağım). Şimdi tek yapmam gereken bu dillerle oynama zamanını bulmak ...

2
Timo Geusch

LISP'de bir ton iş olduğunu bilmiyorum, kesinlikle göremiyorum. Ama uzun zamandır LISP'yi çalıştırdıkları ve dünyadan yeni kod ekleyebilecekleri bazı NASA problarını okuduğumu hatırlıyorum.

Ayrıca New York'ta clojure buluşma grubu çok büyük. Eğer ilgileniyorsanız ve clojure buluşma grubunuza giderseniz, ağ kurma ve iş bulma fırsatları bulabileceğinizi tahmin ediyorum (clojure işleri değil, Java/C++/vb. Gibi şeyler). New York bölgesinde kesinlikle muazzam gibi görünüyor, diğer alanlar değişebilir.

Ayrıca LISP farklı bir düşünce biçimidir. Ek olarak LISP ve SQL, tonlarca iç içe ifadenin kullanılmasına neden olur. Bir ton SQL kullandım ve sonra LISP'nin daha anlamlı olduğunu fark ettim. Ancak, LISP kullanırken SQL'in iç içe geçmiş parantez ve ifadelere alışması konusunda sorun yaşıyorsanız, SQL ifadelerinin anlaşılması çok daha kolay olacaktır.

Klasik bir örnek MAX'ın nasıl uygulanacağıdır (a, b, c). Bir sürü if ifadesiyle kıvrık bir işlev yapabilirsiniz. Veya sadece söyleyebilirsin

MAX (MAX (a, b), c)

ve MAX öğesinin okunması daha kolay olan iki basit iç içe çağrı kullanın. Performans bir sorun olsa da, bunu başka şekilde yapmak isteyebilirsiniz, her yöntemi kullanırken karşılaştırma sayısını saymak için uğraşmadı ... Ayrıca bir C makrosu veya değerlendiren başka bir yöntem aracılığıyla MAX uyguluyorsanız İfadeler birden çok kez değerlendirilebilir, çünkü ifade birden çok kez değerlendirilebilir, bu nedenle yan etkilere dikkat edin ...

2
Cervo

İki ek nokta:

İlk olarak, LISP fonksiyonlar veya veriler arasındaki etkileşimlerin genellikle karmaşık olduğu kod yazmak için harika bir dildir. Birçok popüler dilde, programınızın neden yaptığını yaptığınız konusunda kafanız karıştıysa, programın dahili durumunu devam ederken incelemenize izin vermek için özel işlevler yazmanız gerekir. Bazı dillerde, kodunuzun yeniden derlenmesini beklemeniz gerekir. Elbette buna yardımcı olan hata ayıklayıcılar gibi araçlar olabilir. Bununla birlikte, LISP'de ihtiyacınız olan tek şey programı durdurmanın bir yoludur ve daha sonra tipik olarak LISP'de her şey öğesine erişebilirsiniz. Ortak LISP'de, bazen sadece ^ C yazıyorum veya error çağrısını tek bir işleve atıyorum (bu, yeniden derlenmesi gereken tek şeydir ve yeniden derlemek için hiçbir şey yapmanız gerekmez) . Programı durdurduktan sonra, anında bir hata ayıklayıcıya atıldım - ancak hata ayıklayıcı bana LISP'nin tüm gücünü veriyor ve hata ayıklayıcıdan çıkabiliyor, belirli işlevleri çağırabiliyorum vb. Veri yapılarından herhangi birini kolayca inceleyebilirim programımda. Çoğu Program benzer uygulamalara izin vermelidir. LISP bu konuda benzersiz değildir, ancak sunduğu pek çok popüler dilin ötesine geçmektedir.

İkincisi: LISP'nin herhangi bir lehçesi ile deney yapacaksanız, (a) parantezlerle eşleşen bir düzenleyici kullanarak ve (b) uygun LISP girintisini öğrenmeden yapmazdım. Sizin için de uygun girintiye yakın bir editör kullanmak iyi bir fikir olacaktır. C/C++/Java tarzı kod formatlama, LISP'den daha az parantez/parantez/parantez içeren diller için tasarlanmıştır. LISP güzel baskı stili, aşina olduğunuzda iyi çalışır ve parantezle karıştırılmaz veya alanınızın yarısını boşa harcar ve her satıra bir kapanış parantezi koyarsınız.

2
Mars

Common LISP ve Scheme hakkında biraz bakış açısı eklemek istiyorum. JVM nedeniyle clojure'dan kaçındım, bu yüzden çok fazla perspektifim yok.

Şema güzel, özlü, iyi tanımlanmış bir dildir. CL'nin miras nedeniyle vermesi gereken birçok karar aldı ve daha saf bir yaklaşım aldı. Örneğin, değişkenler ve işlevler aynı ad alanındadır. Varsayılan dil daha küçük ve daha özlüdür, bu da size LISP'nin iyi olduğu şeyleri öğretmek için iyi çalışır, örneğin varsayılan olarak yinelemeli döngüler olmadığından ve kuyruk çağrısı optimizasyonu gerektirdiğinden, yineleme yerine özyineleme kullanımını baskılar. . Şema, öğrenmeye çok değer veren çok ilginç bir hijyenik makro sistemine sahiptir. Ama IMO, öncelikle CL-tarzı Hijyenik olmayan makroları öğrenmenizi tavsiye ederim, çoğu (?) Şeması lehçeler, spesifikasyonun bir parçası olmasa bile, en az bir uygulama sunar. Öğrenmek için bir dil öğrenmek istediğiniz çok fazla göründüğünden, Scheme'yi tavsiye ederim, çünkü ek olarak, kavramlarının çoğu kolayca diğer lispslere ve genel olarak dinamik dillere aktarılır.

Bununla birlikte, Scheme'nin topluluğu parçalanmış ve birkaç küçük cepten başka, çoğunlukla gerçek işlerin yapılmasına ilişkin araştırmalara adanmış gibi görünüyor ... Örneğin, her lehçenin kendi paket yöneticisi var ve paketler çoğu zaman taşınabilir değil lehçeler arasında, bu da şema topluluğunda büyük bir sorundur.

Öte yandan, ortak LISP, bir dil geliştirmek için çok daha pragmatik bir yaklaşım gibi görünmektedir. Standart, uygulamalar arasında çok fazla LISP kodunun taşınabilir olması, birçok derleyicinin hızlı ve iyi optimize edilmesidir. Birçoğu uygulamalar arasında taşınabilir olan geniş bir paket seti vardır. Ve görünüşte (nispeten) büyük miktarda gerçek ürünler dilde oluşturuluyor. Quicklisp deyince, paket yönetimi, Ruby veya Node gibi modern bir toplulukta elde edebileceğinize makul derecede yakın hissediyor. Bununla birlikte CL, kusurlar olmadan değildir, bu noktada şemaya göre çok büyük bir spesifikasyona sahiptir ve hatta geleneksel olarak Lisps'te bir kütüphane olarak yazılan bir şey olan nesne sistemi CLOS bile spec IIRC'nin bir parçasıdır. Ve büyük miktarda sistemin içine yerleşmiş mirası hissedebilirsiniz. Örneğin derleme için bir görüntünün çıkarılmasının standart yapı sistemi yaklaşımı, örneğin belirli bir sır gibi hissedilir.

Aksi takdirde, clojure hakkında konuşamadığımı söyledim ve hedefiniz Emacs uzantıları yazmaksa Emacs LISP açıkça uygun bir seçimdir ve diğer yazılımlar için oldukça uygun bir seçim değildir.

TLDR; Amacınız öğrenmekse Scheme'yi tavsiye ederim. Ancak, yazılım oluşturmak istiyorsanız, iki ana LISP varyantının Ortak LISP'sini öneririm.

1
Arelius

Şu anda, LISP'nin çoğunlukla danışmanlık mağazalarında kullanıldığı izlenimini edindim (danışmanlık mağazalarının çoğunlukla kullandıkları değil).

Pratik yazılım için biraz outre olarak kabul edilir. Çoğunlukla insanlar buna alışık olmadığına inanıyorum.

Geleneksel olarak, Scheme oldukça akademik bir LISP lehçesidir ve Common LISP endüstri lehçesidir.

LISP özellikle sembolik manipülasyon ve yansıma esque yetenekleri için kullanışlıdır.

Örnek olarak, LISP'yi öğrenmek için yazdığım kod, fonksiyonun bir hedef fonksiyon ile farkını en aza indirgemek için rastgele lambda fonksiyonları inşa eden, bunları değerlendiren ve daha sonra üzerinde çalışan bir programdı. Bütün bunlar doğrudan manipülasyondu. C++ veya Java gibi bir dilde, bilgisayarın manipüle edeceği işlevler için bir temsil icat etmek zorunda kalırdım.

1
Paul Nathan

Hangi LISP lehçesinin öğrenileceğini seçmede göz önünde bulundurulması gereken bir diğer faktör, uygulamaların sayısı ve kalitesi olabilir. Bir lehçenin sadece bir veya iki uygulaması varsa, o zaman bu kusurlar giderilene kadar kusurlarıyla sıkışmış olursunuz ve insanların her zaman uygulamayı düzeltmeyi bırakma şansı vardır. Kendi başına bu, LISP'nin tek uygulama lehçesini kullanmamak için bir neden değildir, ancak dikkate alınması gereken bir şeydir. Şema ve Ortak LISP'nin bir avantajı, bu lehçelerin birçok uygulamasının olmasıdır. Her iki dil de standartlar yayınladı, bu nedenle nispeten yeni uygulamalar çoğunlukla aynı kodu çalıştırıyor olabilir. Bu uygulamalardan bazıları uzun zamandır var, ancak hala aktif geliştirme aşamasındalar: Şimdi yüksek kaliteli uygulamalar ve hala rafine ediliyorlar. (Örneğin, yukarıda bahsedilen Steel Bank Common LISP - SBCL son derece hızlı. JVM tabanlı LISP'yi hızlı yapmanın ne kadar kolay olacağını merak ediyorum.)

0
Mars

Cevaplardan çok şey öğrendim. Bu aydınlatıcı sohbete katkıda bulunan herkese teşekkürler.

Bahsetmeliyim newLISP . Hem CL hem de Şema'dan biraz farklı olmasına rağmen, birçok çok yararlı işlev uygular. Http sunucusunu, çoklu işlem işlevlerini (Cilk) ve uzaktan değerlendirme işlevlerini çok temiz ve kullanımı kolay buluyorum.

Tek yürütülebilir küçük, hızlı ve çok sayıda serin pil içerir.

0
CyberFonic