Clojure与Scala中的模式匹配


12

这两种语言的模式匹配之间的主要区别是什么?我不是在指语法,而是功能,实现细节,用例范围和必要性。

Scala应用程序(例如Lift和Play)自豪地谈到了语言模式匹配能力。另一方面,Clojure具有一个库core.match,并内置了解构功能,该功能似乎也很强大。

*注:之所以被问到这个问题,是因为我看到了一篇博客文章,其中的一个程序员作为实验,使用Scala和Clojure构建了一个Lisp解释器。他说,克洛瑞尔(Clojure)比赛在经过一定长度后就中断了,但无法解释原因,但我真的很想知道。您可以在以下位置找到此帖子:http : //www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html


3
@gnat博客文章似乎确实是偶然的。在我看来,他并不真正在乎博客本身的解释,只是比较一种特定语言功能在两种特定语言之间的差异。这不是客观上可以回答的吗?
2014年

3
为了捍卫这个问题:它是客观的,精心编写的,清晰的。OP在发布此问题之前阅读博客为何如此重要?这不会改变问题的质量。

1
这不是Gorilla vs. Shark,因为他要求提供两种语言共有的一种非常特定的功能的非常特定的信息,即使这两种语言的实现方式可能不同。这是一个比大猩猩与鲨鱼更为集中的问题。
Evicatos 2014年

1
同意 大猩猩与鲨鱼的故事是比较两个不可比拟的东西,例如苹果和橘子。比较两种语言的功能实现不是“大猩猩与鲨鱼”。它是特定的,相关的,并且是专家感兴趣的问题类型。它不仅仅是一个“帮助我选择语言”的问题。
Karl Bielefeldt

1
我提到该博客的原因是为了使您更了解促使我提出问题的动机。我认为这将是我实际问题的一个很好的脚注。我解释了一些内容,因此您不需要自己阅读它,但是提供了一个链接,以防万一。我以为*和“ note:”可以很清楚地说明这一点,但是我想我也应该加上一些括号和短划线。PS:鲨鱼。
kurofune

Answers:


21

在我最近观看的这段视频中,Rich Hickey评论说他喜欢像Scala这样的语言的解构部分,但不喜欢模式匹配部分,因此他设计了Clojure。这也许可以解释为什么模式匹配在库中却没有那么健壮,尽管您提到的帖子中看到的这类问题显然是错误。

Rich Hickey提到的替代模式匹配的方法是多方法。大多数语言都允许您根据类型进行多态调度。某些语言还允许您基于值进行操作。使用多种方法,Clojure可以让您基于任意函数来进行操作。这是一个非常强大的概念。

归结为使用语言的程序员应该使用语言自己最好的习惯用法的原则。试图在Clojure中编写类似Scala的代码会遇到困难,反之亦然。


感谢您对我的问题的非常有趣的回答。我从来没有那样想过多方法!看起来对于简单的任务来说会过分杀伤,但是绝对强大。我也同意你所说的成语。我迫不及待想要在Clojure中解决这个问题:)
kurofune 2014年

感谢您的回答。链接的视频中提到Richmond时,Rich说“如果您羡慕模式匹配,这是其中的一半,除了我不喜欢的部分,这是有条件的部分。” github.com/matthiasn/talk-transcripts/pull/90/files#
hawkeye '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.