Lisp-1 ve Lisp-2 arasındaki fark nedir?


96

Lisp-1 ve Lisp-2 arasındaki farkı ve bunun Clojure ile nasıl ilişkili olduğunu anlamaya çalıştım ama yine de tam olarak anlamıyorum. Biri beni aydınlatabilir mi?

Yanıtlar:


69

Wikipedia'ya göre :

Fonksiyonlar için ayrı bir isim alanının bir avantaj olup olmadığı, Lisp topluluğunda bir tartışma kaynağıdır. Genellikle Lisp-1 ve Lisp-2 tartışması olarak anılır. Lisp-1, Scheme modelini ve Lisp-2, Common Lisp modelini ifade eder.

Temelde, değişkenlerin ve işlevlerin çakışmadan aynı ada sahip olup olamayacağıyla ilgilidir. Clojure bir Lisp-1'dir, yani aynı ismin bir fonksiyon ve bir değişken için aynı anda kullanılmasına izin vermez.


11
Bir Lisp-2 aynı isimli fonksiyonlara ve değişkenlere sahip olmak daha kafa karıştırıcı değil mi?
appshare.co

39
Bunun bir nedeni, Lisp-2 lehçelerini kullanan programcıların aynı isimlere sahip fonksiyonlara ve değişkenlere sahip olmak için kendi yollarından çıkmamalarıdır. listgenellikle bir işlev parametresi olarak kullanılır ve hiç kimse, (list ...)standart bir işlev olduğu için çok kafa karıştırıcı olan OMG . listDeğişken olarak sahip olan birçok işlev , listişlevi kullanmaz veya bu değişkenin yanında kullanmaz. Ki oluyor bile çok kötü değil: (list foo list). Bu, aynı kelimenin isim ve fiil olarak göründüğü "iyi dövüşle savaş" gibi bir cümleden daha kafa karıştırıcı değildir.
Kaz

5
@Zubair Java'da daha fazla ad alanı var. Aynı ada sahip bir sınıf, yöntem ve değişken tanımlayabilirsiniz.
2017

20
Bir anımsatıcı olarak, Lisp 1'lerin 1 ad alanına ve Lisp 2'lerin 2 ad alanına sahip olduğunu düşünüyorum (biri işlevler ve biri değişkenler için).
Nick McCurdy

4
@NickMcCurdy Bir anımsatıcı olarak, bir bisikletin iki tekerleği ve üç tekerlekli bisikletin üç olduğunu düşünüyorum.
Kaz

73

Richard Gabriel'in yazdığı bu makaleyi okumak isteyebilirsiniz . Lisp topluluğunun Lisp1 ve Lisp2'de tartıştığı konuların bir özetidir. İlk birkaç bölümde biraz yoğun ve yavaş hareket ediyor, ancak 5. bölümü geçtiğinizde okunması çok daha kolay.

Temel olarak Lisp1, sembolleri değerlere eşleyen tek bir ortama sahiptir ve bu değerler "normal" veya işlevler olabilir. Lisp2'nin (en az) iki ad alanı vardır (sembollerin bir işlev değeri için bir yuvası ve bir normal değer için bir yuvası vardır). Dolayısıyla, Lisp2'de foo adında bir işleve ve foo adlı bir değere sahip olabilirsiniz, oysa Lisp1'de foo adı yalnızca tek bir değeri (işlev veya başka türlü) ifade edebilir.

İkisi arasında birkaç takas ve zevk farklılığı var, ancak ayrıntılar için makaleyi okuyun. Christian Queinnec'in "Küçük Parçalarda Lisp" adlı kitabında da metin aracılığıyla örülen farklılıkların tartışılması var.


7
Gabriel makalesinin daha esrarengiz bölümlerinden biri, Çoklu İşleme hakkındaki 11. bölümdür. Bu bölümde, Lisp1'in işlevsel bir programlama tarzına daha uygun olduğunu, dolayısıyla çoklu işlemeye daha elverişli olduğunu ima eder. Açıkçası, bu Clojure için ilgi çekici. Ama Lisp1'in FP için neden daha elverişli olduğundan emin değilim . Bunun hakkında bilgisi olan var mı?
Peter McLain

41
Muhtemelen FP'nin ana noktası işlevleri birinci sınıf değerler olarak ele almak olduğundan, bu nedenle onları diğer tüm değerlerle aynı şekilde ele almak çok daha uygun ve kavramsal olarak daha temizdir
mikera

10
@PeterMcLain Lisp-1 lehçelerinin kullanıcıları, Lisp-1'in işlevsel programlamaya daha elverişli olduğunu söylediklerinde, kastedilen, kodu funcallve functionoperatörlerle dolu bir kod doldurmanıza gerek olmadığıdır . Bunlar Lisp-1'de kaybolur.
Kaz

3
Bir Schemer Lisp'i yazmaya çalıştığında ne olduğuna bir örnek: emacs.stackexchange.com/q/28979/2787
2016

2
Lisp-2 için "en azından" ifadesini kullandınız. 2 durum arasındaki basit fark şudur: sembolün bir s-ifadesinin baş konumunda olup olmadığı (öyleyse, o zaman fonksiyon ad alanında, başka değişken ad alanında arama). Bu 2 durumdan başka örnekler verebilir misiniz?
Daniel Dinnyes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.