Anda ingin mencari keseimbangan antara kesederhanaan dan kebersihan, fitur menarik, dan platform yang memungkinkan Anda menulis perangkat lunak yang menarik dan berguna (untuk diri Anda sendiri) serta berfungsi sebagai alat pembelajaran. (Yang terakhir ini akan membuat Anda terus maju dan belajar lebih lama.) Berikut beberapa kemungkinannya:
Skema. Mungkin dialek terbersih dari semua. Tidak diragukan lagi mengapa The Little Schemer diterjemahkan dari LISP ke dalam Skema. Spesifikasi standar Skema kelima, R5RS , adalah pendidikan yang luar biasa dalam dan dari dirinya sendiri; ini mungkin bahasa terbaik dan spesifikasi pustaka yang pernah saya baca, serta yang terpendek yang cukup komprehensif. The PLT Skema (sekarang Racket) platform termasuk juru cukup layak dan compiler, baik untuk scripting, dan juga memiliki beberapa alat visual yang membuatnya sangat baik untuk belajar.
Lisp umum. Mungkin varian yang paling portabel dan komprehensif, ini kemungkinan besar yang Anda inginkan jika Anda ingin menulis sesuatu seperti perangkat lunak komersial. Standar mendefinisikan pustaka ekstensif, dan banyak lagi yang tersedia di luar itu, ia memiliki CLOS , yang mungkin akan mengajarkan Anda lebih banyak tentang OO daripada bahasa OO mana pun, dan beberapa kompilernya sangat bagus. Kekurangan termasuk beberapa kutil yang tidak dimiliki Skema (seperti memiliki ruang nama terpisah untuk variabel yang merujuk ke fungsi), tidak bersih dan sederhana (seperti halnya dengan apa pun yang harus memiliki ekstensi dan membuat kompromi diperlukan untuk aplikasi besar di dunia nyata), tidak memiliki makro yang higienis, dan lebih sedikit menekankan rekursi daripada Skema.
Clojure.Ini berjalan di JVM, yang mungkin memberikannya kaki di sana untuk pengembang Java. Ada beberapa kutukan (misalnya, Anda harus secara eksplisit meminta optimasi panggilan ekor, meskipun ini dapat berubah suatu 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 menginginkannya, sambil menjalankan risiko lebih kecil untuk tidak sengaja melakukannya daripada di CL. Anda memiliki akses mudah ke semua perpustakaan Java; itu mungkin hal yang baik untuk kode "dunia nyata", dan cukup tidak berguna dalam hal pembelajaran. Ia memiliki satu set pustaka untuk struktur data persisten dan dukungan untuk STM, yang membuatnya sangat menarik dari sudut pandang yang bersamaan; ini membuatnya mungkin taruhan terbaik Anda jika Anda ' tertarik untuk mempelajari lebih lanjut tentang metode baru dalam menangani pemrograman bersamaan dan paralel. Tampaknya Clojure dapat digunakan untuk aplikasi produksi yang besar seperti Java, dalam arti bahwa Clojure akan memiliki kemampuan untuk melakukan "hal-hal buruk" yang Anda lakukan dalam aplikasi produksi yang lebih suka tidak Anda lakukan dan tidak lakukan saat Anda sedang belajar.
Emacs Lisp. Dalam hal LISP, ini bukan salah satu contoh yang lebih baik di luar sana. Salah satu kesalahan terbesarnya adalah dynamic scoping, tetapi ada banyak kesalahan lainnya. Namun, jika Anda adalah pengguna Emacs, ini mungkin alat paling ampuh yang dapat Anda pelajari untuk meningkatkan penggunaan editor Anda. Berapa banyak yang benar-benar Anda pelajari dari mempelajari Emacs Lisp, selain bagaimana mengembangkan Emacs, bagi saya merupakan pertanyaan terbuka; Saya tidak tahu seberapa sering teknik menarik seperti fungsi tingkat tinggi benar-benar digunakan di Emacs Lisp.
Pembaruan 2018
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 tampaknya terkait dengan Clojure yang tidak hanya menjadi dialek Lisp yang terpisah dengan benar, memperkenalkan banyak ide bagusnya sendiri, tetapi juga sekarang memiliki versi yang hampir identik yang menargetkan JavaScript dan telah menginspirasi banyak Lisps lainnya. menargetkan platform lain. Misalnya, Hy menargetkan CPython AST dan bytecode, yang bertujuan pertama untuk interoperabilitas dengan Python, tetapi menggunakan ide Clojure "jika ragu." (Meskipun dari commit terbaru, yang terakhir mungkin berubah sedikit.)
Perubahan besar yang dibawa dalam proses pengambilan keputusan Anda adalah bahwa Anda juga harus melihat bahasa Lisps atau Lisp apa pun yang tersedia dan bekerja sama dengan bahasa atau platform yang sudah Anda gunakan, baik itu Perl , Ruby , Erlang , Go atau bahkan C ++ pada mikrokontroler .