2010-11-22 2 views
8

나는 기능적 프로그래밍 패러다임에 몰두하여 사고 과정을 제 2의 자연으로 만들어 줄 계획입니다. .NET/Mono는 내가 익숙한 유일한 프레임 워크/객체 모델이며 다른 유형의 시스템을 배우고 싶지 않습니다. F #은 새로운 유형의 시스템을 배우는 부담이 산만 해지지 않기 때문에 분명한 고려 사항입니다.F #은 훌륭한 함수 프로그래밍 방식을 가르쳐 줄 수 있습니까?

하지만 내 관심은 언어 자체에 관한 것입니다. 내 두개골에 FP를 드릴링 할 때 다른 고전적인 함수 프로그래밍 언어 (예 : 하스켈)만큼 좋을까요?

+1

FP의 많은 아이디어를 다양한 언어로 사용할 수 있습니다. 질문은 "FP를 내 두개골에 찔러 넣지 않을 것"입니다. 문제는 FP 습관이나 나쁜 습관을 조장하는 것입니다. –

답변

10

예, 가능합니다. 여기서 특히 도움이되고 밀접한 것은 Real World Functional Programming입니다. FP는 C#과 특히 F # 관점에서 제공됩니다. 너는 그것을 좋아할 것이다.

4

예, 분명히 함수 프로그래밍을 배우는 데 도움이됩니다. F #은 객체 지향 프로그래밍도 지원하므로 스위치가 쉬워야합니다. 결국 완전한 함수형 언어로 옮기길 원한다면, 실제로 OO와 FP의 조합을 OO 나 FP보다 더 잘 찾을 수 있습니다 (저는 스칼라 프로그래머입니다, F #과 같습니다).

2

기능 프로그래밍 패러다임? 하스켈은 곧바로 떠오른다. 그건 그렇고, 하스켈에는 프레임 워크 상속이 없습니다. 내가 아는 한, 프레임 워크은 터미널 창과 프로그래밍 편집기입니다.

.NET 프레임 워크에있는 함수형 프로그래밍 언어를 원하면 F #을 사용해야합니다.

IronPython,하지만 방법은 함수형 프로그래밍 언어가 아닙니다.

+3

예, 사실 IronPython은 함수형 프로그래밍 언어가 아니며 프로그래밍 언어 *가 아닙니다. 파이썬 프로그래밍 언어 (함수형 프로그래밍 언어는 아님) 용 컴파일러입니다. –

9

F #으로 함수 프로그래밍을 학습하면 (특히 C# 및 .NET에 대한 경험이있는 경우) 특히 재미있는 프로젝트를 쉽게 만들 수 있다는 이점이 있다고 생각합니다.

  • 이유 중 하나는 당신이 이미 당신이 다음 작동 코드를 쓰기 시작 할 수 있도록
  • 두 번째 이유는, F 번호가 순수하지 않다는 것이다 (F 번호에서 쉽게 이용할 수 있습니다) .NET 라이브러리 잘 알고 있다는 것입니다 그것을 더 기능적으로 만들기 위해 향상 시키십시오.

F #은 여러 패러다임을 지원하지만 주로 패러다임을 지원하는 Python이나 C#과 비교하여 기능적 언어이지만 주로 동작하지는 않습니다. 이렇게하면 쉽게 기능 스타일을 사용하도록 강요 할 수 있습니다. F #에서 작성하기가 더 어렵 기 때문에 명령형을 피하는 것이 더 쉽습니다 (코드가 더 나 빠졌습니다).

일단 기본 함수 프로그래밍을 "이해"하면 다른 기능 언어를 배우는 것이 더 쉬울 것이라고 생각합니다. Haskell이나 Scheme에 대해 조금 더 알고 싶다면, 더 급진적입니다 (어떤면에서).

일부 실제 프로젝트에서 실제로 사용하지 않고 understadning 개념을 잘 알고 있다면 고전적인 서적을 사용하여 고전적인 언어로 시작하는 것이 좋습니다 (예 : Haskell School of Expression 또는 Structure and Interpretation of Computer Programs). 나는 이것을 부정적인 의미로 해석하지는 않습니다. 개인적으로는 예를 시도하지 않고 기술적 인 책을 읽는 것을 좋아합니다. 독서에서부터 흥미로운 개념을 취할 수 있기 때문에 (그리고 연습은 항상 Google입니다). 물론 Haskell이나 Scheme에서는 코드를 작성할 수 있지만 .NET 프로그래머라면 F # 코드를 작성하는 것이 더 재미있을 것입니다.

3

F #은 대부분의 "다른 고전적인 함수형 프로그래밍 언어"보다 우수 할 수 있습니다.

  1. 기능적 프로그래밍 패러다임 : 이미 .NET을 알고 있기 때문에 F 번호에서 두 개의 유용한 물건을 따기 동안, 당신은 완벽하게 모든 .NET 지식을 활용할 수 있습니다. 즉, FP 스타일로 프로그래밍하는 방법입니다. 모든 언어로 사용할 수 있습니다. 나는 종종 C# 코드에서 FP로 배우기 때문에, 소프트웨어를 작성하는 데 훨씬 유지 보수 가능하고 재사용 가능한 방법이라고 생각하기 때문에.

  2. 하나의 언어의 프로그래밍 프로그래밍 구문. F #은 OCAML과 매우 유사하며, ML 계열은 FP 언어의 3 가지 주요 방언 중 하나를 구성합니다. 나머지 두 가지는 Miranda 가족 (하스켈이 주요 현대 대표자 임)과 LISP 가족 (Common Lisp and Scheme이 두 명의 큰 담당자 인 곳)입니다.

F #에서는 F # 유형과 .NET 유형을 구분하는 데 도움이 될 수 있습니다. 레코드, 튜플, 차별화 된 유니온은 (거의) 순수하게 F # 일이며 거의 모든 기능 언어에서 사용됩니다. 당신이 FP를 배우고 싶다면 이것들을 많이 사용하십시오. 클래스, 구조체 및 인터페이스도 여기에 있지만 .NET 개념입니다. 필요에 따라 그것들을 사용하되, 관용적 인 F # 대신 "구식의 구문으로"C#을 작성하지 않도록 일반적으로는 피하십시오.

하스켈에서 정말로 놓치게 될 것들은 진정한 순수성 (큰 거래는 아니지만), 기본적으로 게으른 평가 (큰 변화) 및 유형 클래스입니다. F #에서 게으른 평가를 할 수는 있지만 명시 적으로 Lazy <> 클래스를 사용해야합니다. 사방에 게으른 평가를하는 것은 하스켈에서 정말 독특하고 강력한 것 중 하나지만 엄격한 FP 개념은 아닙니다. 타입 클래스는 매우 강력하지만 대부분의 실제 상황에서는 클래스가 없어도 얻을 수 있습니다. 그것들은 단지 보일러 판과 반복을 줄이는 더 높은 수준의 추상화 일뿐입니다.

진정한 순도는 일반적으로 더 학문적입니다. 확실한 장점이 있지만, 이미 .NET에 익숙하고 기술이 썩 좋지 않다면, FP 사고 방식을 완전히 사용하기 전까지는 해결하기가 쉽지 않을 것입니다.

관련 문제