Saya telah mencoba untuk memahami perbedaan antara Lisp-1 dan Lisp-2 dan bagaimana kaitannya dengan Clojure tetapi saya masih belum mengerti dengan benar. Adakah yang bisa mencerahkan saya?
95
Menurut wikipedia :
Apakah namespace terpisah untuk fungsi merupakan keuntungan adalah sumber perselisihan di komunitas Lisp. Ini biasanya disebut sebagai debat Lisp-1 vs Lisp-2. Lisp-1 mengacu pada model Skema dan Lisp-2 mengacu pada model Common Lisp.
Ini pada dasarnya tentang apakah variabel dan fungsi dapat memiliki nama yang sama tanpa bentrok. Clojure adalah Lisp-1 yang berarti bahwa ia tidak mengizinkan nama yang sama digunakan untuk fungsi dan variabel secara bersamaan.
list
sering digunakan sebagai parameter fungsi dan tidak ada hal, OMG yang sangat membingungkan karena(list ...)
merupakan fungsi standar. Banyak fungsi yang memilikilist
variabel tidak menggunakanlist
fungsi tersebut, atau tidak menggunakannya di dekat variabel tersebut. Bahkan ketika itu tidak terjadi itu tidak terlalu buruk:(list foo list)
. Ini tidak lebih membingungkan daripada kalimat seperti "pertarungan yang baik" di mana kata yang sama muncul sebagai kata benda dan kata kerja.Anda mungkin ingin membaca makalah ini oleh Richard Gabriel. Ini adalah ringkasan dari isu-isu yang dibahas komunitas Lisp di Lisp1 vs Lisp2. Agak padat dan lambat bergerak di beberapa bagian pertama, tetapi jauh lebih mudah dibaca saat Anda melewati bagian 5.
Pada dasarnya, Lisp1 memiliki satu lingkungan yang memetakan simbol ke nilai, dan nilai tersebut dapat berupa "biasa" atau fungsi. Lisp2 memiliki (setidaknya) dua ruang nama (simbol memiliki slot untuk nilai fungsinya dan satu untuk nilai reguler). Jadi, di Lisp2, Anda dapat memiliki fungsi bernama foo dan nilai bernama foo, sedangkan di Lisp1, nama foo hanya dapat merujuk ke satu nilai (fungsi atau sebaliknya).
Ada beberapa pengorbanan dan perbedaan rasa di antara keduanya, tetapi bacalah makalah untuk detailnya. Buku Christian Queinnec, "Lisp in Small Pieces" juga membahas perbedaan yang terjalin melalui teks.
sumber
funcall
danfunction
operator. Ini menghilang di Lisp-1.