답변:
나는 Haskell을 먼저 배우고 Common Lisp을 배우는 것이 좋습니다. Haskell에 대한 나의 경험은 정적 타이핑이 처음에는 방해가되는 것처럼 보였지만 일단 익숙해지면 대부분의 유형 오류에 로직 오류가 숨겨져 있음을 알았습니다. 이 시점에 도달하고 솔루션을 표현하는 수단으로 유형을 생각하고 자신의 유형을 정의하는 방법을 배우고있는 다음 단계는 Common Lisp를위한 준비가 된 것입니다.
Common Lisp를 사용하면 모나드, 카레 및 Haskell에서 좋아하는 모든 것을 추가 할 수 있지만 Frank Shearar와 같은 다중 상속 및 다중 디스패치가있는 일반 함수 및 고급 예외 처리 시스템을 얻을 수 있습니다.
그렇다면 Common Lisp을 먼저 배우는 것이 어떻습니까? 절차 적 및 OOP 배경에서 온 경험에 의하면 함수형 프로그래밍을 독점적으로 사용해야 할 때까지 함수형 프로그래밍을 실제로 이해하지 못했습니다. 기능 프로그래밍이 편 해지면 Common Lisp에서 제공하는 나머지 도구를 추가하고 현재 작업에 가장 적합한 도구를 사용할 수 있습니다.
그리고 제발
Haskell은 Smalltalk가 OO의 가장 순수한 것을 가르치는 것처럼 적어도 내가 아는 한 FP의 가장 순수한 것을 가르쳐줍니다. (OO와 FP가 결혼 할 수는 없지만,이 두 언어는 "보석"언어이기 때문에 핵심 아이디어입니다.)
Lisp은 실제로 언어 군이므로, 내가 사용하는 가족의 특정 구성원이므로 Common Lisp에 대해 이야기하겠습니다.
Lisp은 여전히 많은 것을 가르쳐 줄 것입니다.
나중에 Lisp을 배우면 가장 고급스러운 텍스트 편집기 인 Emacs를 사용자 정의 할 수 있습니다. 하스켈에서는 그렇게 할 수 없습니다.
Haskell과 Lisp는 완전히 다른 짐승입니다.
Haskell은 일종의 "상아탑에서 순수한 기능 프로그래밍"입니다
Lisp는 일종의 "code-is-data / data-is-code / 고유 한 언어 구성"입니다. 상상할 수있는 방식으로 코드를 조작 할 수 있습니다.
그들은 매우 다릅니다. 둘 다 "기능적 프로그래밍"측면을 공유하지만 차이점과 비교할 때 아주 작은 공통점입니다. 그냥 사용해보십시오. 당신은 그들이 얼마나 다른지를 보게 될 것입니다!
Lisp를 배우면 내가 얻는 주요 이점은 순도를 강조하는 학문적 언어의 맥락에서 배우는 것이 아니라 실제 지향적 다중 패러다임 언어로 FP를 통합하는 방법을 배우는 것입니다.
나는 또한 C / C ++ / Python 배경에서 왔으며 지난 몇 년 동안 FP를 두 번 시도했습니다. 처음에 나는 Haskell을 보았고 그것의 머리 나 꼬리를 만들 수 없었고, Ocaml을 시도했지만 그 이상으로 더 나아지지 않았습니다. 마침내 나는 스칼라에 관해 좋은 것들을 듣기 시작했고, 그것을 시도했고, 그것이 나에게 아주 잘 맞았다는 것을 알았다. 프로젝트 오일러 문제), 하스켈은 훨씬 더 의미가있는 것 같습니다. 사실 나는 방금 하스켈에 관한 몇 권의 책을 주문했고 또 다른 책을 주려고합니다. 비록 이것이 스칼라 즈의 존재에 의해 동기가 부여됩니다.
그래서 나는 다중 패러다임 언어를 사용하는 것을 발견했습니다 (즉, Scala, 그러나 Lisp는 아마도 법안에 맞을 것입니다) FP에 좋은 방법. 그러나 Haskell에 다이빙하는 것을 좋아한다면 (나는 아니었다).
나는 원래 C / C ++ / Ruby 배경에서 왔으며 가능할 때마다 Ruby에서 FP 개념을 사용했습니다. 상태가 그냥 내 뇌를 상하게 했어 내 친구 중 한 명이 어느 날 전화를해서 하스켈로 뭔가를 써달라고 부탁했습니다. 나는 언어를 빨리 배우고 효과가있는 것을 함께 던졌다. 아름답거나 아무것도 아니었지만 효과가있었습니다.
나는 그것을 사용할 것이 없기 때문에 Haskell에서 한 달 휴식을 취했습니다. 그러나 내 블로그 소프트웨어를 작성해야한다고 결정했을 때 Haskell ( https://symer.io )을 사용했습니다. Haskell은 문제를 여러 부분으로 나누고 입력에 따라 다르게 구현할 수 있기 때문에 정말 멋집니다. Haskell은 지능적인 박스 값을 통해 실패를 매우 잘 처리합니다. 이 상자와 함께 사용할 수있는 도구가 너무 많아 단순히 잊어 버렸습니다.
lisp (Scheme)에 대한 나의 경험은 완전히 부정적이었습니다. 언어에는 이러한 지능적이고 간단한 도구가 부족했을뿐만 아니라 Ruby 나 JavaScript만큼 위험성이 느슨했습니다. 그것은 끔찍한 경험이었고 루비 나 파이썬 외에는 새로운 것을 제공하지 않습니다.
C ++은 메모리 관리 외부에서 Haskell에게 촛불을 붙일 수 없습니다. Haskell은 빠르고 빠르며 훨씬 더 간결하며 훨씬 안전합니다. 그러나 Haskell의 안전은 결코 방해가되지 않습니다.
TL; TR Haskell은 신선한 공기를 마시 며 Lisp는 약간 더 기능적인 Ruby입니다.