첫 번째 프로그래밍 언어로 하스켈을 배우기로 결심했습니다. 저는 분석 철학 전공자이며 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 Lisp 및 The 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와 같은 증명 보조가 권장되는 주요 언어 인 것처럼 보입니다.