Saya mencoba mempelajari Lisp dan melihat semua Lisps di luar sana dan perbedaannya.
Saya melihat bahwa dalam beberapa implementasi Skema, Anda dapat menggunakan tanda kurung siku secara bergantian dengan tanda kurung agar mudah dibaca, jadi karena mereka diperlakukan sama, saya berasumsi mereka masih hanya ekspresi-S seperti yang lainnya.
Namun, di Clojure saya melihat bahwa kurung siku dan kurung kurawal digunakan untuk mewakili tipe data yang berbeda seperti vektor dan sebagainya. Apakah ini juga masih merupakan ekspresi S yang valid, atau haruskah itu dianggap atom? Bukankah ini "mematahkan" seluruh konsep ekspresi-S, dengan demikian menjadikan Clojure sebuah Lisp "tidak murni"?
Jawaban:
Notasi literal untuk vektor dan peta (yaitu kurung siku dan kurung kurawal) hanyalah gula waktu-baca , dan apa pun yang dapat Anda wakili dengan notasi itu juga dapat diwakili dengan ekspresi S. Akibatnya, tidak ada kehilangan kekuatan atau homoiconicity, dan memang makro pembaca (yang saya mengerti lebih kuat) tersedia di sejumlah lisps.
Secara kebetulan, perhatikan bahwa Clojure sekarang menyediakan mekanisme untuk membuat literal "tag" kustom, yang, seperti literal lainnya, ditransformasikan ke ekspresi S sebelum dikompilasi dan ditafsirkan.
sumber
S-expressions adalah representasi tekstual untuk data. Bilangan, simbol, sel kontra, daftar, string, ... Common Lisp juga memiliki representasi tekstual untuk array, vektor, lebih banyak jenis nomor, karakter, ... Common Lisp juga menyediakan pembaca yang dapat diperluas pengguna, sehingga pengguna dapat menambahkan lebih banyak representasi tekstual untuk tipe data. Terkadang mekanisme ini juga digunakan untuk mengubah sintaksis bahasa pemrograman Lisp (misalnya untuk mendukung ekspresi infix atau pernyataan dari bahasa pemrograman lain).
Jadi, jika dialek Lisp menawarkan representasi tekstual untuk tipe data tambahan, ini cocok dengan gagasan ekspresi-s.
sumber