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?
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:
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.
list
genellikle 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 . list
Değişken olarak sahip olan birçok işlev , list
iş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.
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.
funcall
ve function
operatörlerle dolu bir kod doldurmanıza gerek olmadığıdır . Bunlar Lisp-1'de kaybolur.