Haskell과 Lisp 대 Haskell 또는 Lisp [닫힘]


40

저는 현재 C, C ++ 및 Python으로 코딩합니다. 함수형 프로그래밍 언어를 선택하고 싶습니다. 현재 Haskell을 향해 기울고 있습니다. 나는 여기서 "Haskell vs Lisp"전쟁을 시작하고 싶지 않다; 내가 알고 싶은 것은 이것입니다. 주로 함수형 프로그래밍에 노출되어 Haskell을 배우면 나중에 Lisp를 배우면 어떤 이점이 있습니까?


1
그리고 F #과 Clojure.
cnd

답변:


58

나는 Haskell을 먼저 배우고 Common Lisp을 배우는 것이 좋습니다. Haskell에 대한 나의 경험은 정적 타이핑이 처음에는 방해가되는 것처럼 보였지만 일단 익숙해지면 대부분의 유형 오류에 로직 오류가 숨겨져 있음을 알았습니다. 이 시점에 도달하고 솔루션을 표현하는 수단으로 유형을 생각하고 자신의 유형을 정의하는 방법을 배우고있는 다음 단계는 Common Lisp를위한 준비가 된 것입니다.

Common Lisp를 사용하면 모나드, 카레 및 Haskell에서 좋아하는 모든 것을 추가 할 수 있지만 Frank Shearar와 같은 다중 상속 및 다중 디스패치가있는 일반 함수 및 고급 예외 처리 시스템을 얻을 수 있습니다.

그렇다면 Common Lisp을 먼저 배우는 것이 어떻습니까? 절차 적 및 OOP 배경에서 온 경험에 의하면 함수형 프로그래밍을 독점적으로 사용해야 할 때까지 함수형 프로그래밍을 실제로 이해하지 못했습니다. 기능 프로그래밍이 편 해지면 Common Lisp에서 제공하는 나머지 도구를 추가하고 현재 작업에 가장 적합한 도구를 사용할 수 있습니다.


6
하스켈과 스몰 토크가 학습에 유용한 이유는 순결입니다.
Frank Shearar

4
나는 순결 이 언어 학습을 훨씬 쉽게 만든다는 데 동의합니다 . 모든 언어가 가능하고 너무 많은 OO 배경을 가지고 있기 때문에 LISP로 기능적 언어 자체를 이해할 수 없었습니다. 그러나 Haskell에는 학습을 방해하는 그러한 개념이 없습니다.
Eonil

1
재밌 네요. 반대의 경험을했습니다. 나는 제 1 언어 인 Scheme을 통해 함수형 프로그래밍의 요점을 찾았습니다. 나는 때때로 Haskell을 해킹하고 필연적으로 Haskell을 떠날 때마다 알고 있던 것의 90 % 이상을 다시 배워야한다는 것을 알았습니다. 그러나 Haskell은 엄청나게 풍부한 언어로 많은 것을 가르쳐 줄 것입니다 (매우 강요합니다). 유형 유형 유형 유형 유형! 유형을 따르십시오!
Josh Infiesto

31

그리고 제발

Haskell은 Smalltalk가 OO의 가장 순수한 것을 가르치는 것처럼 적어도 내가 아는 한 FP의 가장 순수한 것을 가르쳐줍니다. (OO와 FP가 결혼 할 수는 없지만,이 두 언어는 "보석"언어이기 때문에 핵심 아이디어입니다.)

Lisp은 실제로 언어 군이므로, 내가 사용하는 가족의 특정 구성원이므로 Common Lisp에 대해 이야기하겠습니다.

Lisp은 여전히 ​​많은 것을 가르쳐 줄 것입니다.

  • 다중 패러다임이므로 dsimcha가 지적했듯이 FP를 다른 패러다임과 통합하는 방법을 보여줍니다.
  • Lisp는 예를 들어 매크로를 통해 "code-is-data, data-is-code"라고 가르칩니다.
  • CLOS는 여러 상속 기능과 일반 기능을 갖춘 매우 흥미로운 OO 브랜드입니다.

11

나중에 Lisp을 배우면 가장 고급스러운 텍스트 편집기 인 Emacs를 사용자 정의 할 수 있습니다. 하스켈에서는 그렇게 할 수 없습니다.


14
[그의 괄호를
샤프

6
누군가가 텍스트 편집기를 작성할 수 있습니다. Emacs 운영 체제가 제공되지 않는다고 들었습니다. (나는 꼬마. 나는 당신이 독사 모드를 얻을 수 있다는 것을 안다. :)
greyfade

14
실제로, Emacs가 Lisp를 사용하는 것과 정확히 같은 방식으로 Haskell을 사용하는 Yi라는 Emacs 클론이 있습니다. 사실, (GNU) Emacs와 비교할 때, Yi는 커널이 Haskell로 작성되기 때문에 더 순수합니다. 반면 Emacs 커널은 일반적으로 Lisp로 작성되지 않는 경향이 있습니다. GNU Emacs의 커널은 C로 작성되고 JEmacs는 Java로 작성됩니다.
Jörg W Mittag

2
@ Jörg, GNU Emacs 또는 XEmacs의 전체 복제본 대신 부분적으로 다시 구현하는 경우에는 동일하지 않습니다. Word를 Wordpad 또는 메모장과 비교하는 것과 비슷합니다.

1
@ Thorbjørn Ravn Andersen : 네,하지만 그렇게 나쁘지 않습니다. :)
greyfade

11

Haskell과 Lisp는 완전히 다른 짐승입니다.

Haskell은 일종의 "상아탑에서 순수한 기능 프로그래밍"입니다

Lisp는 일종의 "code-is-data / data-is-code / 고유 한 언어 구성"입니다. 상상할 수있는 방식으로 코드를 조작 할 수 있습니다.

그들은 매우 다릅니다. 둘 다 "기능적 프로그래밍"측면을 공유하지만 차이점과 비교할 때 아주 작은 공통점입니다. 그냥 사용해보십시오. 당신은 그들이 얼마나 다른지를 보게 될 것입니다!


+1 : 좋은 지적입니다. 나는 Haskell과 Lisp를 알고있다. 나는 그들 중 어느 쪽의 전문가도 아니지만, 당신은 그들이 매우 다르다는 것이 옳다고 생각합니다. Haskell에서는 데이터를 코드로 사용할 생각이 없습니다. Lisp에는 (AFAIK) 패턴 일치가 없습니다. 아마도 차이점의 목록 (!)이 더 깁니다.
Giorgio

7

Lisp를 배우면 내가 얻는 주요 이점은 순도를 강조하는 학문적 언어의 맥락에서 배우는 것이 아니라 실제 지향적 다중 패러다임 언어로 FP를 통합하는 방법을 배우는 것입니다.


5
"Haskell vs Lisp"전쟁을 원하십니까?
Don Roby

3
Haskell 순도를 강조하는 학문적 언어이며 많은 사람들이 현실에서이를 사용합니다. 스몰 토크도 그 캠프에 있습니다.
Frank Shearar

많은 사람들이 현실 세계에서 Haskell을 사용합니까?
Jon Harrop

1
@Jon Harrop : 글쎄, 나는 실제 세계에서 Haskell을 사용하고 (그리고 특정 응용 프로그램에서는 실제로 잘 작동합니다) 아마도 몇 안되는 사람 중 하나입니까? (?)
Giorgio

5

나는 또한 C / C ++ / Python 배경에서 왔으며 지난 몇 년 동안 FP를 두 번 시도했습니다. 처음에 나는 Haskell을 보았고 그것의 머리 나 꼬리를 만들 수 없었고, Ocaml을 시도했지만 그 이상으로 더 나아지지 않았습니다. 마침내 나는 스칼라에 관해 좋은 것들을 듣기 시작했고, 그것을 시도했고, 그것이 나에게 아주 잘 맞았다는 것을 알았다. 프로젝트 오일러 문제), 하스켈은 훨씬 더 의미가있는 것 같습니다. 사실 나는 방금 하스켈에 관한 몇 권의 책을 주문했고 또 다른 책을 주려고합니다. 비록 이것이 스칼라 즈의 존재에 의해 동기가 부여됩니다.

그래서 나는 다중 패러다임 언어를 사용하는 것을 발견했습니다 (즉, Scala, 그러나 Lisp는 아마도 법안에 맞을 것입니다) FP에 좋은 방법. 그러나 Haskell에 다이빙하는 것을 좋아한다면 (나는 아니었다).


OCaml보다 Scala에 더 많은 관심이 있습니다. 어떻게 오세요?
Jon Harrop

@ 존 : 좋은 질문; 말하기 어렵다. 어쩌면 나는 당시에 "기능"을 할 준비가되지 않았을 수도 있습니다. 어쩌면 방금 올바른 수준에서 스칼라 튜토리얼을 찾았습니다. 아마도 Scala의 C / C ++ / Java 계보는 조금 덜 외계인이되었을 것입니다. 요즘 스칼라가 아닌 F #에 합리적 인 베팅이 주어지면, 아마도 어느 시점에서 OCaml 도메인을 다시 방문 할 것입니다. 주무르기, 나는 다음에 Haskell을 다시 시도하는 경향이 있습니다.
timday

부드러운 이동 방식 :)
Eonil

2

나는 원래 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입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.