답변:
Haskell은 ML 언어 군과 가장 밀접한 관련이 있습니다. 여기에는 물론 OCaml 과 .NET 플랫폼의 F # 도 포함 됩니다. 이러한 언어는 유형 시스템의 기초와 데이터 사용 방법 (대수 데이터 유형, 패턴 일치, 유형 유추 등)을 Haskell과 공유합니다. 물론 다른 점에서 Haskell과 크게 다를 수 있습니다. 대부분의 ML은 엄격하고 불결합니다. 유형 시스템 및 언어 설계 연구를위한 수단으로서 Haskell의 인기는 대부분의 ML 스타일 언어가 덜 강력하지만 이해하기 쉬운 유형 시스템을 갖는 경향이 있음을 의미합니다. 당신이 그리워 하는 동안 말할 수 아마Haskell에 관한 몇 가지 사항, 특히 처음에는 대부분의 Haskell 프로그래머가 ML에서 가정에서 편안하게 기본적인 기본 단계를 편안하게 느낄 것입니다. Haskell 과 전체 구조 가 동일한 언어를 원한다면 ML이 가장 좋습니다.
스칼라 의 기능적 측면ML 전통에서도 많은 영향을 받았으며 Haskell에 익숙한 고급 유형 시스템 기능과 위의 통합 된 표준 OOP 시스템을 가져옵니다. ML 스타일 언어의 OO는 "기본 기능 도구가있는 모델 OO"의 대부분으로 접근하는 경향이 있지만 Scala는 Java 스타일 OO를 사용하고 숨 쉬고 있습니다. 이것은 여러분이 상상할 수 있듯이 Java interop에 이점이 있으며 OO 프로그래머에게 친숙한 작업 환경을 제공합니다. 그러나 Haskell 배경에서 비롯된 Scala에서 여러 기능을 함께 사용하면 기능적인 관용구가 어려워지고 대부분의 Java API가 잘못 설계되어 불필요하게 사용하기 어려워지는 방식에 짜증이 날 것입니다.
마지막으로, Clojure 는 고려하기가 이상해 보이지만 실제로는 Haskell과 더 많은 철학적 측면에서 공통점이 많습니다. Clojure의 상태 및 가치 대 정체성에 대한 접근 방식에서 찾을 수있는 대부분은 유형 시스템을 통해 Haskell이 공식화 한 것과 매우 유사합니다. 이에 따라 Clojure는 Java interop을 더 작은 수준으로 강조하고 OOP에서 드래그하는 것에 대해 크게 걱정하지 않으므로 기능 프로그래밍 자체에 대한 Clojure의 접근 방식 은 이미 익숙한 것에 가장 가깝습니다. 내 견해로는 클로저가 하스켈 외에 STM을 구현 한 유일한 언어라고 말하고 있다고 생각합니다.간단하고 효과적이며 작동합니다. 반면 Clojure는 Lisp 전통에서 비롯된 정적 유형 시스템과 ML에 영향을받는 언어에서 발견되는 대수 데이터 유형 및 패턴 일치에 중점을 두지 않습니다. 그리고 물론 그것은 Lisp이며, 그 자체는 일부 사람들에게는 부정적인 것입니다 (그러나 나는 왜 그런지 모르겠습니다).
함수 프로그래밍에 대한 나의 첫 경험이 Scheme에 있다는 면책과 함께, 나는 아마도 Clojure에 의지 할 것이다. 아마도 OCaml이 두번째 선택 일 것이다.
Clojure는 점점 더 널리 사용되고 있으며 피상적 인 수준에서 하스켈처럼 보이지는 않지만 조금 더 깊게 보이면 하스켈에서 영감을 얻은 것으로 매우 유사한 기능적 스타일을 장려합니다.
Haskell 사용자가 친숙하고 매력적으로 느낄 수있는 주요 Clojure 기능 :
주요 차이점 (관심에 따라 긍정적이거나 부정적 일 수 있음) :
개인적 관점 : Clojure 이전에 Haskell을 배웠고 Haskell의 우아함과 수학적 순도를 좋아했습니다. Clojure는 많은 영감을 얻고 Haskell에서 많은 훌륭한 기능을 차용하지만 훨씬 실용적이고 실용적인 언어입니다. 특히 Java 라이브러리 에코 시스템을 활용할 수 있다는 엄청난 가치를 세면 "완료"를위한 훌륭한 언어입니다.