Pertanyaan Dialek Lisp mana yang harus saya pelajari? [Tutup]


Saya tahu ada beberapa dialek Lisp yang berbeda. Setelah memutuskan bahwa belajar Lisp akan menjadi pengalaman intelektual baru, saya ingin tahu dialek Lisp mana yang harus dipelajari, dan mengapa.

Adakah yang lebih populer dari yang lain? Apakah ada yang lebih "lengkap", seperti dalam, didokumentasikan dan didukung dengan lebih baik? Apa pro dan kontra dari dialek ini?


76
2018-06-17 14:07


asal


Jawaban:


Anda ingin mencari keseimbangan antara kesederhanaan dan kebersihan, fitur menarik, dan platform yang akan memungkinkan Anda untuk menulis perangkat lunak yang menarik dan berguna (untuk diri sendiri) serta berfungsi sebagai alat pembelajaran. (Yang terakhir ini akan membuat Anda terus maju dan belajar lebih lama.) Berikut ini beberapa kemungkinan:

  1. Skema. Mungkin yang terbersih dari semua dialek. Ini tidak diragukan lagi mengapa The Little Schemer diterjemahkan dari LISP ke dalam Skema. Spesifikasi standar Skema kelima, R5RS, adalah pendidikan yang luar biasa di dalam dan dari dirinya sendiri; mungkin itu adalah spesifikasi bahasa dan perpustakaan terbaik yang pernah saya baca, serta yang terpendek yang cukup komprehensif. Itu Skema PLT (Sekarang Raket) platform termasuk penerjemah dan compiler yang cukup baik, baik untuk scripting, dan juga memiliki beberapa alat visual yang membuatnya sangat baik untuk belajar.

  2. Lisp biasa. Mungkin varian yang paling portabel dan komprehensif, ini kemungkinan besar apa yang Anda inginkan jika Anda ingin menulis hal-hal seperti perangkat lunak komersial. Standar ini mendefinisikan perpustakaan yang luas, dan masih banyak lagi yang tersedia di luar itu CLOS, yang mungkin akan mengajarkan Anda lebih banyak tentang OO daripada bahasa OO apa pun, dan beberapa kompiler sangat bagus. Kerugian mencakup beberapa kutil yang tidak dimiliki Skema (seperti memiliki ruang nama terpisah untuk variabel yang mengacu pada fungsi), tidak bersih dan sederhana (seperti halnya dengan apa pun yang harus memiliki ekstensi dan membuat kompromi yang diperlukan untuk aplikasi besar di dunia nyata), tidak memiliki makro higienis, dan menekankan rekursi jauh lebih sedikit daripada Skema.

  3. Clojure. Ini berjalan di JVM, yang dapat memberikannya kaki di sana untuk pengembang Java. Ada beberapa kutil (misalnya, Anda harus secara eksplisit meminta pengoptimalan panggilan ekor, meskipun ini dapat berubah satu hari jika TCO ditambahkan ke JVM). Makro, meskipun tidak higienis, memiliki beberapa fitur untuk membantu Anda menghindari pengambilan variabel, sehingga Anda dapat menangkap variabel jika Anda benar-benar ingin, sementara menjalankan lebih sedikit risiko secara tidak sengaja melakukannya daripada di CL. Anda punya akses mudah ke semua pustaka Java; itu mungkin hal yang baik untuk kode "dunia nyata", dan cukup tidak berarti dalam hal pembelajaran. Itu punya satu set perpustakaan untuk struktur data yang tetap dan dukungan untuk STM, yang membuatnya sangat menarik dari sudut pandang bersamaan; ini mungkin menjadikannya pilihan terbaik Anda jika Anda tertarik untuk mempelajari lebih lanjut tentang metode-metode baru dalam menangani pemrograman konkuren dan paralel. Tampaknya seolah-olah Clojure dapat digunakan untuk aplikasi produksi besar seperti Java, dalam arti bahwa Clojure akan memiliki kemampuan untuk melakukan "hal jelek" yang Anda lakukan dalam aplikasi produksi yang tidak ingin Anda lakukan dan tidak lakukan ketika kamu sedang belajar.

  4. Emacs Lisp. Dalam hal LISP, ini bukan salah satu contoh yang lebih baik di luar sana. Salah satu kesalahan terbesar adalah pencakupan dinamis, tetapi ada banyak lainnya. Namun, jika Anda pengguna Emacs, ini mungkin alat paling kuat yang dapat Anda pelajari untuk meningkatkan penggunaan editor. Seberapa banyak Anda benar-benar akan belajar dari belajar Emacs Lisp, di luar cara memperluas Emacs, adalah bagi saya sebuah pertanyaan terbuka; Saya tidak tahu seberapa sering teknik menarik seperti fungsi tingkat tinggi benar-benar digunakan dalam Emacs Lisp.

2018 Pembaruan

Sudah hampir satu dekade sejak saya menulis posting ini dan keluarga bahasa Lisp sekarang tampaknya mendapatkan daya tarik yang signifikan dalam kesadaran programmer umum. Sebagian besar hal ini tampaknya terkait dengan Clojure yang tidak hanya menjadi dialek Lisp yang terpisah dengan sendirinya, memperkenalkan banyak ide bagusnya sendiri, tetapi juga kini memiliki versi hampir identik yang menargetkan JavaScript dan telah mengilhami banyak Lisps lainnya. menargetkan platform lain. Sebagai contoh, Hy menargetkan CPython AST dan bytecode, yang bertujuan pertama untuk interoperabilitas dengan Python, tetapi menggunakan ide Clojure "ketika ragu." (Meskipun dari commit terbaru, yang terakhir mungkin sedikit berubah.)

Perubahan besar yang terjadi dalam proses pengambilan keputusan Anda adalah Anda juga harus melihat bahasa Lisps atau Lisp apa saja yang tersedia untuk dan berinteraksi dengan bahasa atau platform yang sudah Anda gunakan, baik itu Perl, Rubi, Erlang, Pergi atau bahkan C ++ pada mikrokontroler.


66
2018-06-20 02:49



Saya akan mengatakan Skema, semata-mata karena Si Schemer kecil, yang merupakan salah satu buku paling menyenangkan namun sangat sulit yang pernah saya coba baca.


21
2018-06-17 14:11



Saya dapat merekomendasikan Common Lisp pada SBCL. Kombinasi ini cepat, kuat, matang dan terdokumentasi dengan baik.


9
2018-06-18 09:06



Clojure juga mendapatkan banyak mindshare belakangan ini, dan untuk alasan yang bagus. Struktur data yang bagus, dukungan konkurensi yang sangat baik (membuat Skema dan CL menjadi malu dalam hal ini), dan komunitas yang hebat. Ini juga relatif sederhana, CL setidaknya sama rumitnya dengan C ++.

Ini bukan untuk mengatakan saya tidak menikmati CL atau Skema. Saya belajar Skema dengan SICP. Dan CL membawaku ke Clojure. Itu semua tergantung pada tujuan Anda, saya kira. Jika Anda ingin belajar Lisp yang sangat praktis pergi untuk Clojure. Kalau tidak, CL atau Skema sama-sama bagus.


8
2018-06-17 18:06



Saya lebih suka CL, karena saya suka pemrograman berorientasi obyek, dan CLOS adalah sistem objek terbaik di sekitar.


5
2018-06-17 14:11



aku telah belajar Skema di sekolah. Itu adalah pengalaman belajar yang hebat dan saya tidak akan pernah melupakan dasar-dasar pemrograman fungsional. Mungkin tidak masalah versi LISP mana yang Anda ambil, selama Anda memahami inti kegunaannya - kalkulus lambda tanpa negara.

Ini artikel yang menarik tentang Mengapa MIT beralih dari Skema ke Python dalam kursus pemrograman pengantar.


5
2018-06-17 14:30



Saya akan mengatakan semuanya, setidaknya pada awalnya. Akhirnya Anda mungkin akan mengembangkan preferensi untuk Skema atau Common Lisp, tetapi mereka berdua memiliki perbedaan yang cukup bahwa yang terbaik untuk mendapatkan pegangan pada semua yang ada di luar sana.

Skema memiliki kelanjutan misalnya, dan itu baik untuk belajar tentang mereka dalam Skema, meskipun mereka dapat diimplementasikan dalam Common Lisp.

Mempelajari perbedaan antara lingkup leksikal dan dinamis adalah penting, dan jika Anda mempelajari Lisp dan elisp Umum, Anda akan menemukan implikasi dari keduanya.


2
2018-06-20 01:26



LFE (Lisp Flavored Erlang) akan menyenangkan. Anda dapat memiliki sintaksis cadel di atas Erlang VM.


0
2017-12-08 14:42



Semacam pertanyaan "dimuat" untuk memulai tetapi OP mungkin tidak tahu tentang itu. Umumnya, Common and Scheme lispers seperti PC dan "manusia" komputer Apple, mereka tidak bercampur. Mana yang terbaik mungkin tidak relevan dengan yang mana "berfungsi" untuk Anda. Sungguh, tidak ada banyak perbedaan. Mungkin preferensi untuk satu dari yang lain mungkin dipengaruhi oleh mana yang Anda pelajari pertama. (Bagi saya, daftar kosong seharusnya "tidak ada", dikenal di CL sebagai NIL, dan itu membuat saya Lisper Umum.) Saya suka integrasi SBCL dengan Slime menggunakan EMACS, tetapi SBCL bukan untuk semua orang. Untuk satu hal, SBCL sangat ketat. Jika Anda hanya ingin "bersenang-senang", GNU clisp mudah dan tersedia untuk hampir semua platform.


0
2018-03-30 23:58