Apa perbedaan utama antara pencocokan pola dalam dua bahasa ini? Saya tidak mengacu pada sintaks, tetapi kemampuan, detail implementasi, berbagai kasus penggunaan dan kebutuhan.
Aplikasi scala (mis. Angkat dan Mainkan) berbicara dengan bangga tentang kecakapan pencocokan pola bahasa. Clojure, di sisi lain memiliki perpustakaan, core.match, dan dibangun dalam perusakan, yang juga tampak kuat.
* catatan: Alasan saya terilhami untuk mengajukan pertanyaan ini adalah karena posting blog yang saya lihat di mana seorang programmer, sebagai percobaan, membangun juru bahasa dengan menggunakan Scala dan Clojure. Dia mengatakan bahwa pertandingan Clojure pecah setelah jangka waktu tertentu, tetapi tidak bisa menjelaskan mengapa, tetapi saya benar-benar ingin tahu. Anda dapat menemukan posting ini di sini: http://www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html
Jawaban:
Dalam video ini yang saya tonton baru-baru ini, Rich Hickey berkomentar bahwa dia menyukai bagian yang merusak dari bahasa seperti Scala, tetapi tidak terlalu banyak bagian yang cocok dengan pola, dan dia mendesain Clojure dengan tepat. Itu mungkin menjelaskan mengapa pencocokan pola ada di perpustakaan dan tidak sekuat itu, meskipun jenis masalah yang terlihat di pos yang Anda sebutkan jelas adalah bug.
Apa yang dikatakan Rich Hickey sebagai alternatif dari pencocokan pola adalah beberapa metode . Sebagian besar bahasa memungkinkan Anda melakukan pengiriman polimorfik berdasarkan jenis. Beberapa bahasa juga memungkinkan Anda melakukannya berdasarkan nilai. Menggunakan multimethods, Clojure memungkinkan Anda melakukannya berdasarkan fungsi sewenang-wenang. Itu konsep yang sangat kuat.
Turun ke prinsip bahwa programmer menggunakan bahasa harus menggunakan idiom terbaik bahasa sendiri. Mencoba untuk menulis kode seperti Scala di Clojure akan mengalami kesulitan, dan sebaliknya.
sumber