Clojure와 Scala의 패턴 일치


12

이 두 언어에서 패턴 일치의 주요 차이점은 무엇입니까? 구문이 아니라 기능, 구현 세부 정보, 사용 사례 범위 및 필요성을 언급하고 있습니다.

스칼라 응용 프로그램 (예 : Lift and Play)은 언어 패턴 일치 능력에 대해 자랑스럽게 말합니다. 반면 Clojure는 core.match라는 라이브러리를 가지고 있으며 구조화에 내장되어 있으며 강력한 것으로 보입니다.

* 참고 :이 질문을하게 된 이유는 프로그래머가 Scala와 Clojure를 모두 사용하여 lisp 인터프리터를 작성한 블로그 게시물 때문입니다. 그는 Clojure 경기가 일정 시간이 지나면 파산했다고 말했지만 이유를 설명 할 수는 없지만 정말로 궁금합니다. 이 게시물은 여기에서 찾을 수 있습니다 : http://www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html


3
@gnat 블로그 게시물은 실제로 부수적 인 것 같습니다. 그는 실제로 블로그 자체에 대한 설명에 신경 쓰지 않는 것 같습니다. 특정 언어 기능이 두 가지 특정 언어에서 어떻게 다른지 비교하면됩니다. 객관적으로 대답 할 수 없습니까?
Doval

3
이 질문을 방어하기 위해 : 그것은 객관적이고 잘 작성되어 있으며 명확합니다. OP가이 질문을 게시하기 전에 블로그를 읽는 것이 중요한 이유는 무엇입니까? 그것은 질문의 질을 바꾸지 않습니다.

1
Gorilla와 Shark는 두 언어에서 서로 다르게 구현 되더라도 두 언어에 공통적 인 하나의 매우 특정한 기능에 대한 매우 구체적인 정보를 요구하기 때문에 아닙니다. 이것은 Gorilla 대 Shark보다 훨씬 더 집중된 질문입니다.
Evicatos

1
동의했다. Gorilla vs. Shark는 사과와 오렌지처럼 비교할 수없는 두 가지를 비교하는 것입니다. 두 언어로 기능 구현을 비교하는 것은 Gorilla 대 Shark가 아닙니다. 구체적이고 관련성이 있으며 전문가가 관심을 갖는 질문입니다. "언어 선택을 도와주세요"라는 질문이 아닙니다.
Karl Bielefeldt

1
내가 블로그를 언급 한 이유는 내가 질문을하게 된 동기에 대한 이해를 정리하기 위해서였다. 나는 그것이 실제 질문에 대한 좋은 각주가 될 것이라고 생각했다. 나는 당신이 그것을 직접 읽을 필요는 없지만 일부를 설명했다. 나는 *와 "note :"가 꽤 명확하다고 생각했지만 괄호와 대시를 추가해야한다고 생각합니다. PS : 상어.
kurofune

답변:


21

에서 이 비디오 나는 최근에 시청, 리치 키스 마크는 그가 패턴 매칭 부분을 스칼라 같은 언어의 destructuring 부분을 좋아하지만 너무 많은 것을 코멘트, 그는 이에 따라 Clojure의 디자인. 그것은 아마도 패턴 일치가 라이브러리에 있고 왜 강력하지 않은지 설명하지만, 언급 한 게시물에서 보이는 종류의 문제는 분명히 버그입니다.

패턴 일치에 대한 대안으로 Rich Hickey가 언급 한 것은 다중 방법 입니다. 대부분의 언어에서는 유형에 따라 다형성 디스패치를 ​​수행 할 수 있습니다. 일부 언어에서는 값을 기준으로 할 수도 있습니다. Clojure는 다중 방법을 사용하여 임의의 기능을 기반으로 할 수 있습니다. 그것은 매우 강력한 개념입니다.

언어를 사용하는 프로그래머는 언어 자체의 가장 좋은 관용구를 사용해야한다는 원칙을 따릅니다. Clojure에서 스칼라와 같은 코드를 작성하려고하면 어려움이 따르고 그 반대도 마찬가지입니다.


내 질문에 매우 흥미로운 답변을 주셔서 감사합니다. 그런 식으로 멀티 메소드에 대해 생각한 적이 없습니다! 간단한 작업에는 무리가 있지만 확실히 강력합니다. 나는 당신이 관용구에 대해 말한 것에 동의합니다. 나는 Clojure에 그것의 걸림 새를 얻기를 기다릴 수 없다 :)
kurofune

이 답변에 감사드립니다. 링크 된 비디오는 Rich가 "패턴 일치 부러움을 가지고 있다면 이것이 내가 싫어하는 부분 (조건부)"을 제외하고는 절반이라는 패턴 일치를 언급합니다. github.com/matthiasn/talk-transcripts/pull/90/files#
hawkeye
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.