Haskell 이후에 배울 언어는 무엇입니까? [닫은]


85

첫 번째 프로그래밍 언어로 하스켈을 배우기로 결심했습니다. 저는 분석 철학 전공자이며 Haskell을 통해 자연어 구문 분석을위한 변환기, 정리 검증 자 및 해석기와 같은 관심 프로그램을 빠르고 정확하게 만들 수있었습니다. 2 개월 반 동안 프로그래밍을 해왔지만 Haskell의 의미와 구문은 기존의 명령형 언어보다 배우기가 훨씬 쉬웠으며 대부분의 구성에 익숙해졌습니다.

그러나 Haskell에서의 프로그래밍은 마법과 같으며 프로그래밍에 대한 지식을 넓히고 싶습니다. 배울 새로운 프로그래밍 언어를 선택하고 싶지만, 임의의 언어를 선택하고 삭제하고 반복 할 시간이 충분하지 않습니다. 그래서 저는 제가 찾고있는 언어 유형에 대한 몇 가지 규정과 함께 여기에 질문을 제기 할 것이라고 생각했습니다. 일부는 주관적이며 일부는 Haskell에서 쉽게 전환하기위한 것입니다.

  • 강력한 유형 시스템. Haskell에서 프로그래밍에서 가장 좋아하는 부분 중 하나는 유형 선언을 작성하는 것입니다. 이것은 개별 기능 및 프로그램 전체와의 관계에 대한 나의 생각을 구조화하는 데 도움이됩니다. 또한 내 프로그램의 정확성에 대해 비공식적으로 추론하는 것이 더 쉽습니다. 저는 효율성이 아니라 정확성에 관심이 있습니다.
  • 반복보다는 재귀에 중점을 둡니다. Haskell에서 반복 구조를 사용하지만 재귀 적으로 구현합니다. 그러나 복잡한 반복 절차보다 재귀 함수의 구조를 이해하는 것이 훨씬 더 쉽습니다. 특히 결합 자 및 맵, 접기 및 바인딩과 같은 고차 함수를 사용할 때 더욱 그렇습니다.
  • 배움에 대한 보람. Haskell은 작업하기에 보람있는 언어입니다. Kant를 읽는 것과 약간 비슷합니다. 그러나 몇 년 전 C에 대한 나의 경험은 그렇지 않았습니다. 나는 C를 찾는 것이 아닙니다. 언어는 개념적으로 흥미로운 패러다임을 강요해야합니다. 제 전적으로 주관적인 견해로는 C-likes는 그렇지 않습니다.

답변 무게 측정 : 물론 이것은 단지 메모 일뿐입니다. 잘 정돈 된 답변을 해주신 모든 분들께 답장을 드리고 싶습니다. 당신은 매우 도움이되었습니다.

1) 여러 응답에 따르면 재귀를 강조하는 강력하고 정적으로 입력 된 언어는 또 다른 기능적 언어를 의미합니다. Haskell과 계속해서 강력하게 작업하고 싶지만 camccann과 larsmans는 다른 언어가 "전환을 너무 쉽게 할 것"이라고 정확하게 지적했습니다. Caml에서 Haskell을 작성할 생각이 아니기 때문에 이러한 의견은 매우 도움이되었습니다! 증명 보조자 중에서 Coq와 Agda는 모두 흥미로워 보입니다. 특히 Coq는 구성 논리와 형식 이론에 대한 확실한 소개를 제공 할 것입니다. 1 차 술어와 모달 논리 (Mendellsohn, Enderton, Hinman의 일부)에 대해 약간의 시간을 보냈으므로 Coq를 많이 사용했을 것입니다.

2) 다른 사람들은 Lisp (Common Lisp, Scheme 및 Clojure)를 매우 선호했습니다. 내가 모은 것에서 Common Lisp와 Scheme은 모두 훌륭한 입문 자료를 가지고 있습니다 ( On LispThe Reasoned Schemer , SICP ). SICP 의 자료로 인해 Scheme에 의지하게됩니다. 특히 SICP를 통한 Scheme 은 다른 평가 전략, 게으름의 구현 및 연속, 해석기, 기호 계산 등과 같은 주제에 집중할 수있는 기회를 다룹니다. 마지막으로 다른 사람들이 지적했듯이 Lisp의 코드 / 데이터 처리는 완전히 새로운 것입니다. 따라서 나는 옵션 (2), Lisp에 크게 기울고 있습니다.

3) 셋째, 프롤로그. 프롤로그에는 흥미로운 자료가 많이 있으며 기본 도메인은 제가 관심있는 도메인입니다. 간단한 구문을 가지고 있으며 읽기 쉽습니다. 지금은 더 많은 설명을 할 수 없지만 Prolog의 개요를 읽고 몇 가지 소개 자료를 훑어 본 후 (2)로 순위가 매겨집니다. 그리고 Prolog의 역 추적은 항상 Haskell에 해킹당하는 것 같습니다!

4) 주류 언어 중에서 Python이 가장 흥미로워 보입니다. Tim Yates는 언어가 매우 매력적으로 들립니다. 분명히 파이썬은 종종 1 학년 CS 전공자들에게 가르칩니다. 개념적으로 풍부하거나 배우기 쉽습니다. 더 많은 조사를해야 할 것 같습니다.

추천 해주셔서 감사합니다! Lisp (Scheme, Clojure), Prolog 또는 Coq 또는 Agda와 같은 증명 보조가 권장되는 주요 언어 인 것처럼 보입니다.


34
2.5 개월은 언어를 깊이 배우기에 충분한 시간이 아닙니다. 거품을 터뜨려 죄송합니다.
Woot4Moo

20
그것은 확실히 사실입니다. 그게 무슨 뜻이든간에 내가 Haskell을 "배웠다"는 의미는 아니 었습니다. 나는 언어를 사용하는 것이 편하다는 것을 의미했습니다. 나는 그것을 "학습을 중단"하지 않을 것입니다.
danportin

10
@Michael는 : 대신 효율성의 정확성을 위해 코딩 ... 내가 이상보고 싶어요 무언가이다
니즈 도간

24
@ Woot4Moo : 2.5 개월이면 언어를 "편안하게"할 수있는 충분한 시간입니다. 그가 형식적인 논리에 익숙하고 그의 철학적 배경에서 추상적 인 개념을 가지고 작업한다면 두 배로 그렇습니다. 다른 언어의 습관을 잊을 필요가없는 것도이 경우에 도움이 될 것입니다.
CA McCann

8
@gnovice : 확실히 많은 질문을 받았습니다. 하지만 Haskell에서 처음으로 심각한 프로그래밍 경험을 한 사람을 만나는 것은 이번이 처음입니다. 시간의 화살이 거꾸로 된 것과 같습니다.
Muhammad Alkarouri

답변:


85

프로그래밍 지식을 넓히고 싶습니다. (...) 저는 제가 찾고있는 언어 유형에 대한 몇 가지 규정과 함께 여기에 질문을 제기 할 것이라고 생각했습니다. 일부는 주관적이며 일부는 Haskell에서 쉽게 전환하기위한 것입니다.

강력한 유형 시스템. (...) 또한 내 프로그램의 정확성에 대해 비공식적으로 추론하는 것이 더 쉽습니다. 저는 효율성이 아니라 정확성에 관심이 있습니다.

반복보다는 재귀에 중점을 둡니다. (...)

여기에서 전환을 너무 많이 완화 할 수 있습니다. 두렵습니다. 매우 엄격한 유형 시스템과 순전히 기능적인 스타일은 Haskell의 특징이며 주류 프로그래밍 언어와 유사한 거의 모든 것이 적어도 이들 중 하나를 손상시켜야합니다. 따라서이를 염두에두고 Haskell에 대해 좋아하는 것 같은 대부분 을 유지하기위한 몇 가지 광범위한 제안이 있지만 약간의 변화가 있습니다.

  • 실용성을 무시하고 "Haskell보다 Haskell"을 선택하십시오 . Haskell의 유형 시스템은 비 종결 및 기타 지저분한 타협으로 인해 구멍이 가득합니다. 엉망진창을 정리하고 더 강력한 기능을 추가하면 CoqAgda 와 같은 언어를 얻을 수 있습니다 . 여기서 함수 유형에는 정확성에 대한 증거가 포함됩니다 (함수 화살표 ->를 논리적 의미로 읽을 수도 있습니다 !). 이러한 언어는 수학적 증명 및 정확성 요구 사항이 매우 높은 프로그램에 사용되었습니다. Coq은 아마도 스타일에서 가장 눈에 띄는 언어 일 것입니다. 그러나 Agda는 Haskell과 같은 느낌을 가지고 있습니다 (또한 Haskell 자체로 작성 됨).

  • 유형을 무시하고 더 많은 마법을 추가하십시오 : Haskell이 마법이라면 Lisp 는 원시적이고 원시적 인 창조 마법입니다. Lisp 계열 언어 ( SchemeClojure 포함 )는 극도의 미니멀리즘과 결합 된 거의 비교할 수없는 유연성을 제공합니다. 언어에는 본질적으로 구문이 없으므로 트리 데이터 구조의 형태로 직접 코드를 작성합니다. Lisp에서 메타 프로그래밍은 일부 언어에서 비 메타 프로그래밍보다 쉽습니다.

  • 조금을 손상시키고 가까이 주류로 이동 : 하스켈 당신은 아마없이으로 이동시킬 수있는있는 ML에 의해 크게 영향을 언어의 폭 넓은 제품군에 속하는 너무 많은 어려움. Haskell은 기능적 스타일의 유형 및 사용에 대한 정확성 보장과 관련하여 가장 엄격한 것 중 하나이며, 다른 사람들은 종종 하이브리드 스타일이거나 다양한 이유로 실용적인 타협을합니다. OOP에 대한 노출과 JVM의 Scala 또는 F #의 많은 주류 기술 플랫폼에 대한 액세스를 원하는 경우.NET에서는 Haskell과 많은 공통점이 있으며 Java 및 .NET 플랫폼과의 쉬운 상호 운용성을 제공합니다. F #은 Microsoft에서 직접 지원하지만 Haskell과 비교하여 비 Windows 플랫폼의 이식성 문제와 비교하여 성가신 제한이 있습니다. Scala는 Haskell의 유형 시스템 및 Java의 크로스 플랫폼 잠재력에 대한 직접적인 대응을 가지고 있지만 더 무거운 구문을 가지고 있으며 F #이 즐기는 강력한 자사 지원이 부족합니다.

이러한 권장 사항의 대부분은 다른 답변에도 언급되어 있지만 이에 대한 나의 근거가 약간의 깨달음을 제공하기를 바랍니다.


4
I CoqAgda의 가족은 Qi II 도 볼 수 있습니다 .
Hynek -Pichi- Vychodil

귀하의 의견으로는 F #의 성가신 한계는 무엇입니까? 여가 시간에 F #을 배우는 사람으로서 알고 싶습니다.
Lucas

7
@Lucas : 큰 것 대 베어 본 Haskell은 더 높은 종류의 다형성과 유형 클래스가 없다는 것입니다. 그 외에도 상당수의 GHC 관련 확장 이 꽤 좋습니다. 어떤 식 으로든 치명적인 결함은 아니지만 Haskell에 익숙해지면 그 물건이 없어서 서투른 느낌이 듭니다. 최신 C #에서 다시 C # 1.x를 사용한다고 상상해보십시오.
CA McCann

@HyneK :이 Qi 2 언어는 언뜻보기에 Coq 또는 Adga보다 매우 흥미롭고 유연 해 보입니다. 저자가 그만두기로 결정한 것 같습니다. 이 언어에 대해 계속 작업 할 움직임이 있습니까? 나는 이미 반쯤 죽은 것을 배우고 싶지 않습니다.
알렉스

: @ 알렉스 : 그것처럼 보이는 셴로에 계속있어 shenlanguage.org
amindfv

20

나는 그 가이가되어 잘못된 것을 요구하고 있다고 제안 할 것입니다.

먼저 당신은 당신의 시야를 넓히고 싶다고 말합니다. 그런 다음 원하는 언어의 종류를 설명하면 그 지평이 이미 가지고있는 지평처럼 들립니다. 똑같은 것을 계속해서 배워도 많은 것을 얻을 수는 없습니다.

Lisp, 즉 Common Lisp, Scheme / Racket 또는 Clojure를 배우는 것이 좋습니다. 기본적으로 모두 동적으로 입력되지만 일종의 유형 힌트 또는 선택적 정적 입력 기능이 있습니다. 라켓과 클로저는 아마도 최선의 선택 일 것입니다.

Clojure 는 기본적으로 불변성과 많은 지연 평가와 같은 더 많은 Haskellism을 가지고 있지만 Java Virtual Machine을 기반으로합니다. 이는 약간의 이상한 사마귀가 있음을 의미합니다 (예 : JVM은 꼬리 호출 제거를 지원하지 않으므로 재귀가 친절합니다. 해킹).

Racket 은 훨씬 오래되었지만 정적 유형 지원 및 함수 프로그래밍에 중점을 두는 등 그 과정에서 많은 힘을 얻었습니다. 아마도 라켓을 최대한 활용하실 것 같습니다.

Lisps의 매크로 시스템은 다른 곳에서 볼 수있는 것보다 매우 흥미롭고 훨씬 강력합니다. 그것만으로도 적어도 볼 가치가 있습니다.


3
하스켈의 관점에서 볼 때 타입 힌팅이나 선택적 정적 타이핑은 완전히 동적 타이핑과 전혀 다르지 않습니다. 그것은 매우 다른 사고 방식입니다. 즉, Lisp-y 언어는 모든 종류의 재미 있고 모든 프로그래머가 적어도 어느 정도 시간을 배우는 데 소비해야한다고 생각합니다.
CA McCann

19

전공에 맞는 관점에서 볼 때 명백한 선택은 Prolog 또는 그 파생어와 같은 논리 언어처럼 보입니다. 논리 프로그래밍은 기능적 언어 (예 : The Reasoned Schemer 참조)에서 매우 깔끔하게 수행 할 수 있지만 논리 패러다임으로 직접 작업하는 것을 즐길 수 있습니다.

twelf 또는 coq와 같은 대화 형 정리 증명 시스템도 당신의 환상을 불러 일으킬 수 있습니다.


2
강력한 형식의 언어에 대한 관심을 언급 할 때 형식화 된 고차 논리 프로그래밍 언어 인 lambdaProlog를 권장합니다. 하나의 컴파일 구현 Teyjus입니다 - code.google.com/p/teyjus (공개 : 나는 Teyjus에 근무).
Zach Snow

18

Haskell 프로그래머가 편안하게 느낄 수있는 구문을 가진 강력한 증명 보조 도구 인 Coq 를 배우는 것이 좋습니다. Coq의 멋진 점은 Haskell을 포함한 다른 기능 언어로 추출 할 수 있다는 것입니다. Hackage 에 Coq로 작성된 패키지 ( Meldable-Heap )도 있으며 작동에 대한 속성이 입증 된 후 Haskell로 추출되었습니다.

Haskell보다 더 많은 힘을 제공하는 또 다른 인기있는 언어는 Agda입니다 . 저는 Agda가 Hackage에 의존적으로 타이핑되어 있고 제가 존경하는 사람들에게 잘 존경 받는다는 사실을 넘어서는 잘 모릅니다.

나는 이것들 중 어느 것도 쉽지 않을 것이라고 생각합니다. 그러나 Haskell 을 알고 있고 Haskell 유형 시스템보다 더 많은 힘을주는 언어로 나아가고 싶다면 그것들을 고려해야합니다.


1
Agda는 Haskell의 자연스러운 "다음 단계"처럼 들립니다.
Deniz Dogan

5
철학 전공자로서 그가 형식 논리에 대한 많은 경험을 가지고 있다면 Curry-Howard 스타일의 증명 보조자가 대부분의 베테랑 프로그래머보다 그에게 덜 당혹 스러울 수 있다는 점도 주목할 가치가 있습니다!
CA McCann

11

주관적인 관심사 외에 제한 사항을 언급하지 않았고 '배움에 대한 보상'을 강조 했으므로 (정적 인 타이핑 제한은 무시하겠습니다), 패러다임이 다른 몇 가지 언어를 배우는 것이 좋습니다. 각각의 '모범'입니다.

  • 리스프의 코드로서의 데이터 / homoiconicity 일에 대한 그들이 최고의 아니라면, 동적의 예 (다소 엄격) 함수형 프로그래밍 언어 좋은 때문에 방언
  • 지배적 인 논리 프로그래밍 언어로서의 프롤로그
  • 하나의 진정한 OOP 언어로서의 스몰 토크 (일반적으로 이미지 중심적인 접근 방식 때문에 흥미 롭습니다)
  • 어쩌면 얼랑 또는 Clojure의 당신은 동시 / 병렬 / 분산 프로그래밍을위한 위조 언어에 관심이 있다면
  • 넷째 스택 지향 프로그래밍에 대한
  • ( 엄격한 기능적 정적으로 형식화 된 지연 프로그래밍을위한 Haskell )

특히 Lisps (스킴만큼 CL이 아님)와 Prolog (및 Haskell)는 재귀를 수용합니다.

제가이 언어의 전문가는 아니지만 Erlang과 Forth를 제외하고 각각의 언어에 대해 어느 정도 시간을 보냈고, 각 언어가 다른 각도에서 문제 해결에 접근함에 따라 모두 눈을 뜨고 흥미로운 학습 경험을 제공했습니다. .

그래서 내가 몇 가지 언어를 시도 할 시간이 없다는 부분을 무시한 것처럼 보일 수 있지만, 나는 이들 중 어느 것에도 시간을 낭비하지 않을 것이라고 생각하며, 모두 살펴보아야합니다.


나는 보호자와 관련된 Erlang의 제한을 견딜 수 없었습니다;)
gorsky

10

방법에 대한 스택 지향 프로그래밍 언어 ? 고양이 는 당신의 최고점을 친다. 그것은:

  • 유형 추론을 사용하여 정적으로 입력합니다.
  • 반복과 같은 일반적인 명령형 언어 개념을 다시 생각하게합니다. 조건부 실행 및 루핑은 결합 자로 처리됩니다 .
  • 보상-또 다른 계산 모델을 이해하도록합니다. 문제를 생각하고 분해하는 또 다른 방법을 제공합니다.

Dobbs 박사 는 언어가 약간 변경되었지만 2008 년에 Cat에 대한 짧은 기사를 발표했습니다 .


10

강력한 형식의 프롤로그를 원한다면 Mercury 는 흥미로운 선택입니다. 나는 과거에 그것에 덤벼 들었고 그것이 내게 준 다른 관점을 좋아했다. 또한 유형 시스템에서 조정 성 (어떤 매개 변수가 자유 / 고정되어야 하는가) 및 결정 성 (결과가 몇 개입니까?)이 있습니다.

Clean 은 Haskell과 매우 유사하지만 모나드 (구체적으로는 IO 모나드)의 대안으로 사용되는 고유성 유형이 있습니다. 고유성 입력은 또한 배열 작업에 흥미로운 일을합니다.



8

큰 기준 (정적 * 타이핑) 중 하나를 충족하지 못했지만 Python에 대한 사례를 만들 것입니다. 당신이 그것을보아야한다고 생각하는 몇 가지 이유는 다음과 같습니다.

  • 명령형 언어의 경우 놀랍도록 기능적입니다. 이것이 제가 그것을 배웠을 때 저를 놀라게 한 것 중 하나였습니다. 예를 들어 목록 이해력을 사용 하십시오 . 람다, 일급 함수, 반복자 (맵, 접기, zip ...)에 기능적으로 영감을받은 많은 구성이 있습니다. 문제에 가장 적합한 패러다임을 선택할 수있는 옵션을 제공합니다.
  • IMHO, Haskell과 마찬가지로 코드를 작성하는 것이 아름답습니다. 구문은 간단하고 우아합니다.
  • 그것은 효율성에 너무 세밀하게 초점을 맞추기보다는 일을 직접적으로하는 것에 초점을 맞춘 문화를 가지고 있습니다.

그래도 다른 것을 찾고 있다면 이해합니다. 예를 들어 논리 프로그래밍은 다른 사람들이 제안한 것처럼 골목길에 올 수 있습니다.


* 유형을 선언하고 싶기 때문에 여기서 정적 유형을 의미한다고 가정합니다. 기술적으로 Python 강력한 형식의 언어입니다. 예를 들어 문자열을 숫자로 임의로 해석 할 수 없기 때문입니다. 흥미롭게도 Boo 와 같은 정적 타이핑을 허용하는 Python 파생물이 있습니다.


강력한 타입 시스템은 "정적"타이핑만을 의미하지는 않습니다.
Deniz Dogan

+1은 larsmans의 답변에 대한 내 의견도 참조하십시오. 그러나 Python을 다소 기능적이라고 광고하는 데주의하십시오. 예를 들어, 발전기 표현은 일반적으로보다 선호되는 map, filter등,하지만 여전히, 발전기, 발전기 표현은 게으른 평가를 알고하고이 기능을했다 사람에게 익숙한 느낄 것이다.

16
정말? 함수형 프로그래밍을 많이하지 않은 사람들에게는 파이썬이 특히 기능적으로 보인다고 생각합니다. 나는 Python과 Haskell을 상당히 많이 사용했고, Python은 좋은 언어이고 확실히 기능적 언어에서 몇 가지를 빌 렸지만 여전히 99 % 필수입니다.
CA McCann

@camccann 당신 말이 맞아요. 제 관점이 다르기 때문에 제가 이것을 흥미로운 대안으로 제공하고 있습니다. 명령형 프로그래밍을 먼저 배운 사람으로서 저는 Python을 통해 적절한 곳에서는 함수 기술을 사용하고 다른 것이 의미있는 곳에서는 피할 수 있다는 점에 감사합니다. 나는 그것이 "기능적"이라고 주장하는 것이 아니라 단지 좋은 타협을 만든다는 주장이다.
Tim Yates

Haskell에서 배운 습관은 Python을 모국어로 배운 다른 사람들보다 훨씬 더 나은 Python 프로그래머가 될 수 있습니다.
u0b34a0f6ae

8

Erlang을 추천합니다. 강력한 타이핑 언어가 아니므로 시도 해봐야합니다. 프로그래밍에 대한 접근 방식이 매우 다르며 강력한 타이핑이 The Best Tool (TM)이 아닌 문제가 있음을 알 수 있습니다. 어쨌든 Erlang은 정적 유형 검증 (타자기, 투석기)을위한 도구를 제공하며 이점을 얻을 수있는 부분에 강력한 타이핑을 사용할 수 있습니다. 당신에게 흥미로운 경험이 될 수 있지만 준비가되어 있으면 매우 다른 느낌이 될 것입니다. "개념적으로 흥미로운 패러다임"을 찾고 있다면 Erlang, 메시지 전달, 공유 대신 메모리 분리, 배포, OTP, 오류 처리 및 오류 "예방"대신 오류 전파 등에서 찾을 수 있습니다. Erlang은 현재 경험과는 거리가 멀 수 있지만 C와 Haskell에 대한 경험이 있다면 여전히 두뇌가 간질입니다.


8

귀하의 설명이 주어지면 Ocaml 또는 F #을 제안 합니다.

ML 제품군은 일반적으로 강력한 유형 시스템 측면에서 매우 좋습니다. 패턴 매칭과 결합 된 재귀에 대한 강조도 분명합니다.

제가 조금 주저 하는 부분 은 배움 에 대한 보람 입니다. 그것들을 배우는 것은 의심 할 여지없이 저에게 보람이있었습니다. 그러나 제한 사항과 원하는 것에 대한 설명을 고려할 때 실제로 Haskell과 훨씬 다른 것을 찾고 있지 않은 것 같습니다.

제한 사항을 두지 않았다면 Python 또는 Erlang 을 제안했을 것입니다 . 두 가지 모두 사용자의 안전 영역에서 벗어날 수 있습니다.


6

내 경험상 강력한 타이핑 + 재귀 강조는 또 다른 기능적 프로그래밍 언어를 의미합니다. 그런 다음 다시 말하지만 Haskell만큼 "순수한"사람은 없다는 점을 감안할 때 이것이 매우 보람있는 것인지 궁금합니다.

다른 포스터가 제안했듯이 Prolog와 Lisp / Scheme은 모두 동적으로 입력되지만 훌륭합니다. 특히 Scheme에 대한 강력한 이론적 "맛"을 가진 훌륭한 책이 많이 출판되었습니다. 많은 일반적인 컴퓨터 과학 지혜 (메타 순환 통역사 등)를 전달하는 SICP를 살펴보십시오 .


4
첫 번째 단락에 +1, 정확히 내가 질문을 읽을 때 생각했던 것. - 새로운 것을 배우기 위해, 파이썬 같은 현대적인 필수 언어를 제안 특히 그렇지 않은 이후 어떤 OP의 (동적 입력, 사방 반복자 등)에 사용된다. 또한 메타 클래스 또는 생성기 (게으른 목록과 놀랍도록 유사한) / 생성자 표현식 (목록 이해력 + 생성기의 일반화 역할을 함)과 같은 매우 멋진 고급 개념이 있습니다. 또한, dict 및 set comprehensions 규칙.

3
@delnan : Haskell에는 목록 이해 기능도 있으며 생성자 / 반복자는 Haskell의 표준 목록 유형을 사용하여 Haskell에서 쉽게 표현할 수 있습니다. 따라서 두 언어 간의 가장 큰 차이점은 객체 지향 프로그래밍과 사전과 같은 (가장 자주) 불순한 데이터 구조입니다.
Deniz Dogan

1
@Deniz Dogan : Python에서 선언과 적절한 어휘 범위 지정이 없다는 점을 잊지 마십시오.
Fred Foo


5

Lisp 조사를 시작할 수 있습니다.

프롤로그도 멋진 언어입니다.


5

타입 시스템에 대한 선호도에서 벗어나기로 결정했다면 J 프로그래밍 언어에 관심이있을 것입니다. 기능 구성을 강조하는 방식이 뛰어납니다. Haskell에서 포인트없는 스타일을 좋아한다면 J의 암묵적인 형태가 보람이있을 것입니다. 특히 의미론과 관련하여 매우 생각을 자극하는 것으로 나타났습니다.

사실, 그것은 당신이 원하는 것에 대한 당신의 선입견과 맞지 않지만 그것을 보여주십시오. 그것이 밖에 있다는 것을 아는 것만으로도 발견 할 가치가 있습니다. 완전한 구현의 유일한 소스는 J Software, jsoftware.com입니다.


0

메인 스트림 중 하나로 이동합니다. 사용 가능한 리소스, 기술의 향후 시장성, 풍부한 개발자 생태계를 고려할 때 Java 또는 C #으로 시작해야한다고 생각합니다 .


14
Haskell에 비해 둘 다 꽤 절름발이 언어 IMO입니다.
missingfaktor

9
Haskeller에게 Java로 이동하도록 요청하는 것은 Bill Gates에게 빈민가로 이동하도록 요청하는 것과 같습니다. :-/
missingfaktor

1
+1 확실히 당신을 비추천 할 무언가를 제안합니다. Java와 C #은 좋은 생태계를 가지고 있으며 둘 다 진지한 작업에 매우 권장됩니다. 확실한 장점으로 JVM에서 Clojure를 사용하거나 CLR에서 F #을 사용할 때 Haskell (, Java 및 C #)에 대한 지식을 활용할 수 있습니다.
ponzao

6
@ponzao : 어그, 아니, 누군가가 Haskell에서 Java 또는 C #으로 이동하는 것은 끔찍하고 잔인하다는 것을 암시합니다. Scala, F # 및 Clojure는 JVM / CLR에서 실행되는 것과 동일한 이점을 모두 갖춘 훨씬 더 좋은 언어입니다.
CA McCann

5
분석 철학의 경우 주요 Java 또는 C #은 시간 낭비입니다.
MaD70 2010 년

0

좋은 질문입니다. 저의 배경은 매우 다르지만 (유기 화학) 몇 달 동안 하스켈을 철저히 즐기면서 최근에 직접 물어 보았습니다.

당신과 마찬가지로 C와 그 ilk는 의문의 여지가 없습니다.

저는 오늘날 두 가지 실용적인 스크립팅 언어로 Python과 Ruby 사이를 오가며 두 가지 모두 저를 행복하게 해주는 몇 가지 기능적 구성 요소를 가지고 있습니다. 여기서 Rubyist / Pythonist 토론을 시작하지 않고이 질문에 대한 개인적인 실용적인 대답은 다음과 같습니다.

먼저 신청할 변명을받는 사람 (Python 또는 Ruby)을 알아보세요.

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