programing

Lisp의 어떤 방언을 배워야합니까?

nasanasas 2020. 9. 22. 08:16
반응형

Lisp의 어떤 방언을 배워야합니까? [닫은]


Lisp에는 몇 가지 다른 방언이 있다는 것을 알고 있습니다. Lisp를 배우는 것이 새로운 지적 경험이 될 것이라고 결정 했으므로 어떤 Lisp 방언을 배우고 그 이유를 알고 싶습니다.

다른 것보다 더 인기있는 것이 있습니까? 그들 중 하나가 더 나은 문서화 및 지원과 같이 "완전한"것입니까? 이 방언의 장단점은 무엇입니까?


단순함과 청결 함, 매력적인 기능, 그리고 흥미롭고 유용한 소프트웨어를 (자신에게) 작성하고 학습 도구로 사용할 수있는 플랫폼 사이의 균형을 찾고 싶습니다. (마지막으로 계속해서 학습 할 수 있습니다.) 다음은 몇 가지 가능성입니다.

  1. 계획. 아마도 모든 방언 중에서 가장 깨끗할 것입니다. 이것이 The Little Schemer 가 LISP에서 Scheme으로 번역 된 이유 입니다. 다섯 번째 Scheme 표준 사양 인 R5RS 는 그 자체로 훌륭한 교육입니다. 내가 읽은 가장 멋진 언어와 라이브러리 사양 일뿐만 아니라 합리적으로 포괄적 인 가장 짧은 사양 일 수도 있습니다. PLT 계획 (현재 라켓) 플랫폼은 상당히 괜찮은 인터프리터와 컴파일러를 포함 스크립팅에 대한 좋은, 또한 학습이 우수하게 시각적 도구가 있습니다.

  2. Common Lisp. 아마도 가장 이식 가능하고 포괄적 인 변형 일 것입니다. 이것은 상용 소프트웨어와 같은 것을 작성하려는 경우 원하는 것일 가능성이 가장 높습니다. 표준은 광범위한 라이브러리를 정의하고 그 이상으로 더 많은 것을 사용할 수 있습니다. CLOS 가 있습니다. 아마도 OO 언어보다 OO에 대해 더 많이 가르쳐 줄 것이며 일부 컴파일러는 매우 훌륭합니다. 단점은 Scheme에없는 일부 사마귀 (예 : 함수를 참조하는 변수에 대한 별도의 네임 스페이스를 가짐), 명확하고 단순하지 않음 (확장을 가져야하고 절충을 필요로하는 모든 경우와 마찬가지로)입니다. 실제 세계의 대규모 응용 프로그램), 위생적인 ​​매크로가 없으며 Scheme보다 재귀를 훨씬 덜 강조합니다.

  3. 클로저.이것은 JVM에서 실행되므로 Java 개발자를 위해 바로 사용할 수 있습니다. 몇 가지 사마귀가 있습니다 (예 : TCO가 JVM에 추가되면 언젠가 변경 될 수 있지만 꼬리 호출 최적화를 명시 적으로 요청해야합니다). 매크로는 위생적이지는 않지만 변수 캡처를 방지하는 데 도움이되는 몇 가지 기능이 있으므로 CL에서보다 실수로 수행 할 위험을 줄이면서 실제로 원하는 경우 변수를 캡처 할 수 있습니다. 모든 Java 라이브러리에 쉽게 액세스 할 수 있습니다. 그것은 아마도 "실제"코드에 좋은 일이며 학습 측면에서는 의미가 없습니다. 영구 데이터 구조를위한 라이브러리 세트와 STM 지원이있어 동시 관점에서 볼 때 매우 흥미 롭습니다. 이것은 아마도 당신이 동시 및 병렬 프로그래밍을 처리하는 새로운 방법에 대해 더 많이 배우고 싶습니다. Clojure는 사용자가 원하지 않는 작업과하지 않는 작업을 프로덕션 앱에서 수행하는 "추한 작업"을 수행 할 수 있다는 점에서 Java와 같이 대규모 프로덕션 애플리케이션에 사용할 수있는 것처럼 보입니다. 배울 때.

  4. Emacs Lisp. LISP와 관련하여 이것은 더 나은 예 중 하나가 아닙니다. 가장 큰 결함 중 하나는 동적 범위 지정이지만 다른 많은 결함이 있습니다. 그러나 Emacs 사용자 인 경우 편집기 사용을 개선하기 위해 배울 수있는 가장 강력한 도구 일 수 있습니다. 그러나 Emacs를 확장하는 방법을 넘어서 Emacs Lisp를 배우면서 얼마나 많은 것을 배웠는가는 저에게 열린 질문입니다. 고차 함수와 같은 흥미로운 기술이 Emacs Lisp에서 실제로 얼마나 자주 사용되는지 모르겠습니다.

2018 업데이트

내가이 글을 쓴 지 거의 10 년이 지났고 Lisp 언어 군은 이제 일반 프로그래머 의식에서 상당한 견인력을 얻고있는 것으로 보입니다. 이것의 대부분은 그 자체로 Lisp의 적절하게 분리 된 방언이되었을뿐만 아니라 많은 좋은 아이디어를 소개하는 Clojure와 관련이있는 것으로 보입니다. 또한 이제 JavaScript를 대상으로하는 거의 동일한 버전을 가지고 있으며 다른 많은 Lisps에 영감을 불어 넣었습니다. 다른 플랫폼을 대상으로합니다. 예를 들어, Hy 는 CPython AST 및 바이트 코드를 대상으로하며 먼저 Python과의 상호 운용성을 목표로하지만 "의심스러운 경우"Clojure 아이디어를 사용합니다. (최신 커밋에서는 후자가 약간 변경 될 수 있습니다.)

이로 인해 의사 결정 과정에 큰 변화가 생기는 것은 Lisps 또는 Lisp 유사 언어를 사용할 수 있는지 살펴보고 이미 사용중인 언어 또는 플랫폼과 상호 운용해야한다는 것입니다. Perl , Ruby , Erlang , Go 또는 마이크로 컨트롤러의 C ++ .


저는 Scheme이라고 말하고 싶습니다. Little Schemer 때문입니다.이 책은 제가 지금까지 읽으려고했던 가장 놀랍도록 재미 있지만 매우 어려운 책 중 하나입니다.


SBCL에서 Common Lisp를 추천 할 수 있습니다 . 이 조합은 빠르고 강력하며 성숙하며 잘 문서화되어 있습니다.


또한 Clojure는 요즘 많은 마음을 공유하고 있으며 그럴만 한 이유가 있습니다. 훌륭한 데이터 구조, 매우 우수한 동시성 지원 (이 점에서 Scheme과 CL을 부끄럽게 함) 및 훌륭한 커뮤니티. 또한 비교적 간단합니다. CL은 적어도 C ++만큼 복잡합니다.

이것이 내가 CL이나 Scheme을 좋아하지 않는다는 말은 아닙니다. 나는 SICP로 Scheme을 배웠다. 그리고 CL은 나를 Clojure로 데려 왔습니다. 그것은 모두 내가 생각하는 당신의 목표에 달려 있습니다. 매우 실용적인 Lisp를 배우고 싶다면 Clojure를 선택하십시오. 그렇지 않으면 CL 또는 Scheme이 모두 좋습니다.


나는 객체 지향 프로그래밍을 좋아하기 때문에 CL을 선호하고 CLOS는 주변에서 가장 멋진 객체 시스템입니다.


학교에서 Scheme배웠습니다 . 훌륭한 학습 경험이었고 저는 함수형 프로그래밍의 기초를 결코 잊지 않을 것입니다. 유용성의 핵심 인 상태 비 저장 람다 계산법을 이해하는 한 어떤 버전의 LISP를 선택하든 상관 없습니다.

다음은 MIT가 프로그래밍 입문 과정 에서 Scheme에서 Python 으로 전환 한 이유 에 대한 흥미로운 기사입니다 .


나는 적어도 처음에는 그들 모두를 말할 것입니다. 결국 당신은 아마도 Scheme 또는 Common Lisp에 대한 선호도를 개발하게 될 것이지만, 둘 다 거기에있는 모든 것을 처리하는 것이 가장 좋을만큼 충분한 차이가 있습니다.

예를 들어 Scheme에는 연속성이 있으며 Common Lisp에서 구현할 수 있지만 Scheme에있는 항목에 대해 배우는 것이 좋습니다.

Learning the difference between lexical and dynamic scope is important, and if you learn both Common Lisp and elisp you'll come across the implications of both.


LFE (Lisp Flavored Erlang) would be nice. You can have the lisp syntax on top of the Erlang VM.


Was a kind of "loaded" question to begin with but OP probably didn't know about it. Generally, Common and Scheme lispers are like PC and Apple computer "people", they don't mix. Which one is best is probably not as relevant as which one "works" for you. Really, there is not that much difference. Likely a preference for one over the other maybe influenced by which one you learn first. (To me, an empty list should be "nothing", known in CL as NIL, and that makes me a Common Lisper.) I like the integration of SBCL with Slime using EMACS, but SBCL is not for everyone. For one thing, SBCL is very strict. If you just want to "have fun" the GNU clisp is easy and available for virtually every platform.

참고URL : https://stackoverflow.com/questions/1007250/which-dialect-of-lisp-should-i-learn

반응형