Clojure vs Scala'da desen eşleştirme


12

Bu iki dilde kalıp eşleştirme arasındaki temel farklar nelerdir? Sözdiziminden bahsetmiyorum, ancak yetenek, uygulama ayrıntıları, kullanım alanları ve gereklilik.

Scala uygulamaları (örneğin, Kaldır ve Oynat), desen eşleştirme becerilerini gururla konuşur. Clojure, bir kütüphane, core.match ve güçlü gibi görünen yıkım inşa etti.

* Not: Bu soruyu sormak için ilham almamın nedeni, bir programcının deney olarak hem Scala hem de Clojure kullanarak lisp tercümanı oluşturduğu bir blog yazısı nedeniyle. Clojure maçlarının belirli bir süre sonra kırıldığını, ancak nedenini açıklayamadığını söyledi, ama gerçekten merak ediyorum. Bu gönderiyi burada bulabilirsiniz: http://www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html


3
@gnat Blog yazısı gerçekten rastlantısal görünüyor. Bana öyle geliyor ki, gerçekten blogun bir açıklamasını umursamıyor, sadece belirli bir dil özelliğinin iki belirli dilde nasıl farklılaştığının karşılaştırılması. Bu objektif olarak cevaplanabilir değil mi?
Doval

3
Bu sorunun savunmasında: nesnel, iyi yazılmış ve açık. OP'nin bu soruyu göndermeden önce bir blog okuması neden önemlidir? Bu sorunun kalitesini değiştirmez.

1
Bu Gorilla vs. Shark değil, çünkü her iki dilde de farklı uygulanabilse bile, her iki dilde ortak olan çok özel bir özellik hakkında çok spesifik bilgi istiyor. Bu, Gorilla ve Shark'a göre çok daha odaklanmış bir soru.
Evicatos

1
Kabul. Gorilla vs. Shark, elma ve portakal gibi karşılaştırılamaz olan iki şeyi karşılaştırmakla ilgilidir. Bir özelliğin uygulamalarını iki dilde karşılaştırmak Gorilla vs. Shark değildir. Spesifik, konuyla ilgili ve uzmanların ilgilendiği türden bir soru. Bu sadece bir "dil seçmeme yardım et" sorusu değil.
Karl Bielefeldt

1
Blogdan bahsetmemin nedeni, beni soruyu sormaya neyin motive ettiğine dair anlayışınızı yuvarlamaktı. Asıl sorum için iyi bir dipnot olacağını düşündüm. Bazılarını açıkladım, bu yüzden kendiniz okumak zorunda kalmayacaksınız, ancak yaptıysanız bir bağlantı ekledim. * Ve "note:" ifadelerinin oldukça net olduğunu düşündüm, ama sanırım bazı parantezler ve tire işaretleri de eklemeliydim. PS: köpekbalıkları.
kurofune

Yanıtlar:


21

Yakın zamanda izlediğim bu videoda Rich Hickey, Scala gibi dillerin yıkıcı kısmını sevdiğini, ancak desen eşleştirme bölümünü çok sevmediğini ve Clojure'u buna göre tasarladığını söyledi. Bu muhtemelen, desen eşleştirmesinin neden bu kadar sağlam değil bir kütüphanede olduğunu açıklıyor, ancak bahsettiğiniz yazıda görülen sorunlar açıkça hatalar.

Rich Hickey'in desen eşleşmesine alternatif olarak bahsettiği şey çok metredir . Çoğu dil, türe göre polimorfik sevkiyat yapmanızı sağlar. Bazı diller bunu bir değere göre yapmanıza izin verir. Multimethods kullanarak Clojure bunu herhangi bir keyfi işleve göre yapmanızı sağlar. Bu oldukça güçlü bir kavram.

Bir dili kullanan programcıların, dilin en iyi deyimlerini kullanması gerektiği ilkesine dayanır. Clojure'da Scala benzeri bir kod yazmaya çalışmak zorluklar yaşayacaktır ve bunun tersi de geçerlidir.


Soruma çok ilginç bir cevap için teşekkür ederim. Bu şekilde çoklu yöntemleri hiç düşünmemiştim! Basit işler için aşırıya kaçacak gibi görünüyor ama kesinlikle güçlü. Deyim hakkında söylediklerine de katılıyorum. Clojure içinde asmak için sabırsızlanıyorum :)
kurofune

Bu cevap için teşekkürler. Bağlantılı video, Rich'in "desen eşleştirme kıskançlığı varsa, bu hoşlanmadığım kısım dışında koşullu olan yarısı" dediğinde desen eşleşmesinden bahsediyor. github.com/matthiasn/talk-transcripts/pull/90/files#
Hawkeye
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.