LISP는 F#과 어떤 관련이 있으며, LISP를 배우는 것은 F#까지 유용한 다리입니까?

StackOverflow https://stackoverflow.com/questions/1033552

문제

이것은 상황입니다 : 나는 주로 프로그램 C#이며 잃고 싶지 않은 글을 쓰고 있습니다. 동시에 기능 프로그래밍을 배우고 싶습니다. 물론 명백한 대답은 F#입니다.

그러나 C#을 제외한 모든 것에 대해 EMACS를 편집자로 사용하며 LISP도 배우고 싶습니다. (편집자/IDE의 언어를 배우십시오. 그래서 VS-Macro를 작성하는 데 약간의 VB를 알고있는 이유입니다.) LISP는 내가 배우고 싶은 것이 아닙니다.

F#에 관해서는, 인터롭 문제없이 C#과 어울릴 수 있습니다. 훌륭한 GUI (WPF)와 다른 .NET 케이크가 많이 있습니다. 그러나 물론 LISP만큼 성숙하지는 않습니다.

내가 현실적이라면 나는 기능적 언어를 내 직업 생활에 밀수하고 싶다면 f#여야합니다. 두 개의 전체 언어를 배우는 것이 약간 많이 보이기 때문에 LISP가 기능 프로그래밍을 배우는 좋은 방법이되기를 바랐으며, 나중에 F#을 시작하면 매우 쉬울 것입니다 ....

이것이 사실입니까? 아니면 두 언어가 전혀 비교할 수 없습니까?

도움이 되었습니까?

해결책

LISP는 대규모 언어 및 구현 제품군입니다. 예를 들어 체계는 아마도 100 개가 넘는 구현 (약 10 명 중 약 10 개)이있는 LISP 방언입니다. Common LISP는 현재 약 10 개의 현재 유지 된 구현을 가진 또 다른 방언입니다. 체계와 공통 LISP는 모두 구현이 구현하려는 표준을 작성했습니다.

F#은 언어와 구현입니다. Microsoft에서. 그것은 대부분 OCAML에서 파생되었으며 ML 언어의 가족에 속합니다.

LISP는 기능적 프로그래밍을 지원하는 매우 초기 언어였습니다 (60 년대 LISP 1.5). 기능적 프로그래밍을 통한 초기 실험은 LISP에서 수행되었습니다. LISP 커뮤니티에서 70 년대에 기능 프로그래밍의 뿌리에 대한 움직임이 있었고 결과는 계획. 그리고 특히 지난 세기의 80 년대와 90 년대에는 새로운 기능 언어가 나타났습니다 (ML, Miranda, FP, SML, Haskell, Clean, Worly, 일반적인 LISP 방언과는 상당히 다릅니다. 여전히 일부 유산이 있지만 대부분 다른 방향 (정적 타이핑, 유형 추론, 모듈 시스템, 배치 언어, 대수 데이터 유형, 게으른 평가, 순도 등)으로 개발되었습니다. 제도 커뮤니티에는 여전히 FP 커뮤니티와의 연락처가 많이 있습니다. 그러나 그것은 대부분입니다.

특정 FP 언어와 독립적으로 배울 수있는 몇 가지 기본 FP 아이디어가 있지만 일반적으로 F#은 대부분의 LISP 방언과 매우 다릅니다. F#이 .NET 생태계를 지원한다는 다른 기능 (특히 Microsoft Creation이기 때문에)은 LISP 방언에 의해 잘 지원되지 않습니다.

또한 F#을 배우기 위해 EMACS LISP와 같은 제한된 LISP 방언을 아는 것도 많은 혜택을 기대하지 않습니다.

다른 팁

나는 일반적인 LISP와 F#을 통해 배울 수있는 것에 대한 작은 '겹침'만 있다고 생각합니다. 공통점은 내가 대략적으로 생각한다는 것입니다

  • 'Cons-Lists'를 일반적인 기본 데이터 유형으로 프로그래밍하고 때로는 루프보다는 재귀 (특히 꼬리 수익성) 기능을 작성합니다.
  • 일반적인 고차 기능의 일부 기본 사용 (예 : 'MAP' - 목록의 모든 값에 함수 적용)

그 핵심 기능적 프로그래밍 물건과는 별도로, 나는 일반적인 LISP와 F#이 두 가지 주류 '기능적'(비 Haskell) 언어만큼 서로 떨어져 있다고 생각합니다. 일반적인 LISP는 역동적입니다. F#은 정적으로 유형됩니다. 구문 형태는 완전히 다릅니다. 런타임은 완전히 다릅니다. 라이브러리는 매우 다릅니다. 객체 시스템은 완전히 다릅니다.

어떤 순서를 배웁니다

F#은 SML 및 CAML과 같은 ML 언어 제품군과 가장 비슷합니다. 구문 및 기능은 LISP와 다릅니다.

그러나 나는 컴퓨터 과학 관점에서 적어도 하나의 기능 언어를 배우는 것이 정말로 중요하다고 생각합니다. 그런 식으로 생각할 수 있다는 것은 좋습니다.

그리고 F#을 시작하기 전에보다 순전히 기능적인 언어를 배우는 것은 좋은 기능 프로그래밍 습관을 선택하는 방법이 될 것입니다. 당신은 왔습니다.

내 생각에, 기능 프로그래밍 학습에는 두 가지 접근 방식이 있습니다.

  1. Lisp 또는 Haskell과 같은보다 순수한 기능적 언어를 사용하여 즉시 절차 적 사고 방식에서 벗어나도록합니다. 또는

  2. F#과 같은 실용적인 기능적 언어를 사용하여 더 친숙하지만 기능이 적은 구성을 제공하여 쉽게 나아갈 수 있도록 도와줍니다.

두 경우 모두 언어로 유용한 일을 할 수 있다면 학습 경험에서 더 많은 것을 얻을 수 있습니다. LISP (EMACS)와 F# (.NET interop)에 대한 동기가있는 것처럼 들리므로 둘 다 살펴보고 관심을 캡처하는 것을 볼 것입니다.

궁극적으로 한 언어보다 기능적 프로그래밍 개념 (고차 기능, 부작용, 꼬리 재귀 등)을 이해하는 데 더 많은 가치가 있습니다. 그리고 일단 그러한 개념을 배우면 새로운 언어를 집어 들고 기능을 점점 더 기능하는 C#과 같은 다른 언어로 적용하는 것이 훨씬 쉽습니다. 그 라인을 따라 관심이있을 수 있습니다 현실 세계를위한 기능적 프로그래밍.

고려해야 할 두 가지 중요한 사항은 다음과 같습니다.

  • LISP는 동적으로 입력되는 반면 F#은 정적으로 입력됩니다.
  • LISP에는 매크로가 내장되어 있습니다. F#은 그렇지 않습니다.

그것들은 기능적으로 간주되고 많은 공통 기능을 공유하지만, 다르지만 다릅니다. LISP를 배우는 것은 확실히 당신을 더 나은 F# 프로그래머로 만들 것이고 그 반대도 마찬가지입니다. 그러나 여전히 실용적이 될 수 있도록 둘 다의 특성을 배워야 할 것입니다.

.NET과 상호 로프를 할 수 있기 때문에 확실히 F#을 선택할 것입니다. 그러나 프로그래밍 아름다움을 위해 LISP도 시도 할 것입니다.

그것들은 모두 기능적 언어이지만 구문 적으로 매우 다릅니다. 그것은 많은 것을 의미합니다 개념 비슷할 것이며 (절차 개발자로서) 당신은 같은 마음을 구부리려고해야하지만, 그것들은 매우 다른 언어입니다.

F#은의 미분입니다 ML (모든 파생 상품으로 불순한 기능 언어로 간주됩니다) LISP 나이가 많고 "순수한"기능적 언어로 간주됩니다.

기능적 언어의 순도는 매혹적인 주제이며 나는 당신이 읽는 것이 좋습니다 언어 순도와 더럽고 깨끗한 기능 개념을 더 잘 이해하려면 :

많은 사람들이 "순수한"기능 언어에 대해 이야기하는데, 여기서 "순수한"은 "좋은"과 동의어 인 것 같습니다. 순수한 기능 언어의 정의와 일반적으로 관련된 두 가지 특성이 있습니다.

  1. 함수에는 부작용이 없습니다
  2. 주어진 인수로 호출 된 함수는 항상 동일한 값을 반환합니다.

나는 F#을 처음 접했지만 F# 전에 LISP를 연구했으며 .NET 프레임 워크와 프로그래밍 언어의 영역 내에서 F#을 맥락화하는 데 매우 도움이된다고 생각합니다.

나는 적어도 처음 몇 가지 비디오를 보는 것을 진심으로 추천합니다.

http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/

이들은 첫 시간 안에 LISP의 기본 사항을 가르쳐줍니다. 이 시리즈는 그 지식을 기반으로하고 거기에서 떨어지는 흥미로운 원칙을 초래합니다.

F# 및 체계의 의미론은 강력한 타이핑을 제외하고는 매우 유사합니다.

또한, 계획은 너무 작아서 배우지 않습니다!

프로그래밍 언어 LISP는 자체적으로 특별하지만 기능 프로그래밍을 지원한다는 점을 제외하고는 F#과 전혀 유사하지 않습니다. LISP에서 F#로 이월되는 언어 구성이 많지 않습니다. LISP를 배우고 싶다면 가십시오. 기능 프로그래밍에 대한 아이디어는 구문이 아니라 이월됩니다. LISP는 정말로 50 대 후반입니다. 많은 언어가 그 영향을 받았으며 방언이 상당히 많이 있습니다.

F# 전에 배울 수있는 순수한 기능 언어를 찾고 있다면 Haskell을 제안합니다. Haskell은 ML에 의해 크게 영향을 받았으며 F#은 ML의 미분이기 때문에 F#에 대한 좋은 전환 언어입니다. Haskell 코드를보고 F# 코드에서 유사한 패턴을 볼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top