좋은 첫 기능 프로그래밍 프로젝트는 무엇입니까? [닫은]


19

좋은 첫 기능 프로그래밍 프로젝트는 무엇입니까?

내 학사 프로젝트를 끝내고 기능적인 프로그래밍 프로젝트로 마무리하고 싶습니다. 우리는 학교에서 공부하지는 않았지만 스스로 새로운 것을 배우려고 노력하고 있습니다. 새로운 패러다임을 배우는 것은 새로운 언어뿐만 아니라 저에게도 큰 연습이 될 것입니다. .

문제는 여름 휴가를 활용하고 함수형 프로그래밍에 대해 더 잘 이해하고 한 언어에 익숙해지기 위해 프로젝트에서 조금 앞서 시작하고 싶습니다.

약간 어려운 도전 과제이지만 언어, 패러다임 등을 배울 수있는 좋은 프로젝트가 무엇이라고 하시겠습니까? 그러면 학사 프로젝트에 적합한 프로젝트 (더 발전된 프로젝트)가 무엇이라고 생각하십니까?

함수형 프로그래밍을 시작할 때 가장 좋은 언어에 대한 제안도 감사하겠습니다.


1
"어떤 언어를 선택해야합니까?"와 프로젝트 선택 질문은 모두 주제가 아닙니다. 자세한 내용은 FAQ이 메타 토론 을 참조하십시오.
Adam Lear

답변:


10

상대적으로 수학적 또는 논리적 인 프로그래밍 언어를 사용하는 것이 일반적으로 더 쉽습니다. 일반적으로 함수형 프로그래밍 언어는 주어진 입력에서 출력으로의 변환 형식을 나타내는 응용 프로그램에 적합합니다.

어려운 순서로 몇 가지 아이디어 :

  • 유전자 알고리즘-솔루션이 간단한 DSL로 표현되는 특정 작업으로 솔루션을 발전시키는 프로그램을 작성하십시오. 2D 그리드에서 음식을 찾고 다른 종류의 전략을 발전시키는 작은 봇을 만들기 전에 재미있었습니다.

  • 구문 분석 조합기- 고차 함수를 사용하여 임의의 언어에 대한 구문 분석기를 구성 할 수 있는 구문 분석기 결합기 라이브러리를 빌드하십시오 .

  • 당신이 정말로 도전을 원한다면, 당신은 컴퓨터 게임을 작성해 볼 수 있습니다 ... 게임은 기능적인 프로그래밍 스타일로 관리하기가 까다로울 수 있는 많은 양의 상태를 가지고 있기 때문에 까다로운 작업임을 명심하십시오 . 모나드 등에 대해 알고 싶었던 것보다 더 많이 배우기를 기대하십시오.

실용적인 기능적 언어로 Clojure를 추천합니다. 나는 그것을 약 18 개월 동안 사용 해 왔으며 선택에 매우 만족합니다. 주요 이유는 다음과 같습니다.

  • 동시성 -Clojure는 놀라운 STM 시스템을 갖추고있어 멀티 코어 동시성에있어 현재 세계 최고의 언어가되었습니다. 이것이 왜 특별한 지 이해 하려면 비디오 http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey를 참조하십시오.
  • Lisp 이기 때문에 "코드는 데이터"라는 철학 때문에 매크로 기반 메타 프로그래밍 (프로그램, 유전자 알고리즘 등을 작성하는 프로그램)에는 환상적입니다.
  • 실용적인 기능적 프로그래밍 -Clojure 스타일은 매우 기능적이지만 (고차 함수, 게으른 시퀀스 등을 강조합니다) 하스켈처럼 완전히 순수하지는 않습니다. 안정적인 상태 및 부작용을 처리 할 수있는 유용한 도구가 많이 있습니다
  • 동적 -Clojure는 기본적으로 동적 언어입니다. 생산성이 크게 향상되었습니다. 그러나 정적 입력의 성능 이점을 원할 경우 나중에 선택적으로 정적 유형 힌트를 추가 할 수 있습니다.
  • 완전히 컴파일 됨 -Clojure 코드는 항상 "준수"하더라도 준수되므로 꽤 괜찮은 성능을 얻을 수 있습니다. 필자가 사용한 대부분의 동적 언어보다 확실히 더 좋습니다.
  • JVM 에코 시스템의 모든 라이브러리 및 도구에 무료로 액세스 할 수 있습니다. 따라서 라이브러리가 매우 제한적인 학술 언어와 달리 Java 유니버스의 모든 항목에 쉽게 액세스 할 수 있습니다.

다음을 통해 기본 사항을 매우 쉽게 시도 할 수 있습니다.

  • 4Clojure 온라인 문제 세트 - 초기 문제는 좋은으로 봉사 Clojure의 언어로 소개 "를 수행하여 학습"
  • http://www.try-clojure.org/ 의 온라인 Clojure REPL

질문에 대한 답변이 모두 선택되었으므로 질문에 대한 답변을 선택했습니다. 시간 내 주셔서 감사합니다.
Meme

Haskell도 STM을 보유하고 있습니다. (
대안

@ mikera : JVM 작업을 위해 ABCL을 사용해 보셨습니까? 나는 그것을 시도하고 작은 예를 만들었지 만 거의 경험이 없다. (또한 할 일 목록에 Clojure 책이 있지만 이것은 또 다른 이야기입니다. ABCL 및 Java에 대한 경험이 있으면 궁금합니다.)
Giorgio

@ Giorgio : ABCL은 JVM에서 Common Lisp를 제대로 구현 한 것처럼 보입니다. OTOH Clojure는 JVM을 위해 설계되어 훨씬 더 "현대적인"혁신을 통합하고, 더 많은 커뮤니티 모멘텀을 갖는 장점이 있습니다. Common Lisp의 이전 버전과의 호환성 유지에 관심이 있는지 아닌지에 따라 결정됩니다.
mikera

9

특정 프로젝트에 대해 생각하기 전에 함수형 프로그래밍의 기본 사항을 배우는 것으로 시작하여 적합한 프로젝트 유형을 파악할 수 있습니다.

시작하기 가장 좋은 곳은 아마도 Lisp의 체계 방언을 기반으로 한 컴퓨터 프로그램의 구조 및 해석 (SICP) 일 것입니다. 이것은 전형적인 CS 텍스트이며 전체 텍스트는 온라인으로 제공됩니다 (링크 제공).

화려하고 JVM을 대상으로하는 최신 기능 언어를 사용하려면 Clojure를 살펴보십시오. Clojure 전용 SICP 버전도 있습니다 .

SICP 텍스트를 살펴보면 기능 프로그래밍이 특정 유형의 작업에 매우 적합한 이유에 대한 아이디어를 얻게되며 연습이 본격적인 프로젝트에 영감을 줄 수 있습니다. Clojure 경로를 선택하고 기존 프로젝트를 검토하려는 경우 여기에 좋은 링크가 있습니다 .


이 책의 링크를 제공해 주셔서 감사합니다. 더 잘 이해하기 위해 그것을 읽을 것입니다.
Meme

오늘 SICP를 읽었습니까?
MattyD

3

정량 분석

재정이 다소 흥미로울 경우, 기능적 프로그래밍으로 일부 퀀트 작업을 수행하는 것은 알고리즘이 매우 우수하므로 적합합니다. 나는 포트폴리오 이론과 샤프 및 소르 티노 비율 등과 같은 것들을 이야기하고 있습니다. 펀드의 수익을 분석하고 다른 통계, 다이어그램 등을 제공하는 앱을 만드십시오.

F # 만 권장합니다. 시작하기 쉬운 기능적 언어라고 생각하고 도구와 프레임 워크가 우수합니다. 다른 대안은 lisp와 clojure이지만 배우기가 조금 더 어렵습니다.


높은 수준에서 실제로 많은 기능을 수행 할 수 있다는 것은 사실입니다. 예를 들어 사람들은 기능적 언어를 사용하여 이국적인 옵션 지불 방식을 설명했습니다. 그러나 PCA 계산, 비선형 방정식 해결 등과 같은지면 수준으로 내려 가면 알고리즘이 점점 반복적으로 바뀌고 구식 방식으로 코딩하는 것이 좋습니다.
quant_dev

1
필자의 경험에 따르면 정량 분석은 일련의 알고리즘을 실행하는 것에 관한 것입니다. 나는 C #으로 양의 물건을 구현했습니다 그리고 그것은 매우 물건의 포트폴리오 이론 종류 이상, LINQ에 부합 한
Homde

알고리즘 자체의 구현은 어떻습니까?
quant_dev

대부분의 경우 문제가 없습니다. 예리한 비율을 계산하고 먼저 수익률 시리즈에서 연간 수익을 계산 한 다음 그 값을 무위험 비율과 변동성 (annualizedReturn-riskFreeRate) / 휘발성과 함께 사용합니다. 기능적 언어로는 처리 할 수없는 것이 없습니다
Homde

가격 책정 모델 교정은 어떻습니까?
quant_dev

3

헤드 스타트의 경우 F #에서 작은 블랙 잭 게임을 구현할 수 있습니다. 이 짧은 비디오 자습서 동안 할당 된 숙제 프로젝트 입니다. 해결책은 인터넷과 비디오 중 하나에서도 제공됩니다.


2

OCaml을 사용하여 체계 또는 lisp에 대한 통역사를 작성할 수 있습니다.


또한 하스켈에서의 작문 체계에 대한 하스켈 책조차도 주목하십시오.
대안

2

어떤 기능적 언어를 생각하고 있었습니까? 각각의 특성이 다릅니다. 저에게 가장 큰 영향을 준 언어는 하스켈 (Hastell)이었습니다.


나는 덴마크에서 Microsoft가 모든 것이 인기가 있기 때문에 솔직히 F #을 생각하고 있었지만 다른 의견을 읽을수록이 결정을 의심합니다. 나는 패러다임을 주로 배우는 데 도움이되는 언어를 원하며, 필요하거나 원하는 경우 다른 언어를 배우는 것이 어렵지 않다고 확신합니다.
Meme

당신이 어디에 있고 무엇을 하느냐에 따라 크게 달라집니다. 우리에게는 Microsoft 프로그래밍 기술이 기본 플랫폼을 지원하지 않으므로 쓸모가 없습니다. 그러나 나는 틀렸다 : 만약 당신이 F #을 사용하고 싶다면, 새로운 F # 관련 질문을여십시오.

나는 그것을 사용하고 싶지 않습니다. 아직 결정을 내리지 않았습니다. 사용할 언어에 대한 질문은 어쨌든 보조 언어였습니다.
Meme

이 경우 프로젝트를 찾은 다음 해결 방법을 제안하십시오. 예를 들어 Prolog는 의사 결정 트리 검색에 유용합니다. Haskell은 패턴 매칭에 좋습니다. Lisp는 데이터에 따라 런타임에 Lisp 프로그램을 구성하고 조작하는 데 유용합니다.

0

일부 오픈 소스 프로젝트에 기여할 수도 있습니다.

예를 들어 Frege 프로그래밍 언어 프로젝트에는해야 할 일이 많이 있습니다. 예를 들어 기본 Haskell 라이브러리 포팅에 신경 쓸 수 있습니다. 이렇게하면 작업하는 동안 일종의 Haskell 전문가가됩니다.

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