어떤 Lisp를 배워야합니까?
어떤 Lisp (방언)를 배워야하며 그 이유는 무엇입니까?
CL과 Scheme 사이의 단편화는 흡수 속도를 늦 춥니 다 (적어도 저에게는!).
그러니 "진정한 대답"을 해주세요!
나는 기능 비교를 읽으려고 노력했지만 방언이 완전히 꼬리 재귀인지 여부와 같이 esoterica (내가 완전히 이해하지 못함)에서 수렁에 빠진 것 같습니다. 나는 여러분 모두가 (집합 적으로) 불투명 한 차이점을 명확히 할 수 있기를 바랍니다.
내가 좋아하는 것들
좋은 라이브러리 지원, 좋은 환경 및 유니 코드 지원.
내가 싫어하는 것
화염 전쟁. 처음에는 유용하지만 장기 학습을 방해하는 기능입니다.
업데이트
저는 대부분 MzScheme을 사용해 왔는데, 일단 readline 지원을 받으면 잘 즐기고 있습니다. 나는 유닉스에서 GUI를 실행하지 않기 때문에 나에게 좋은 환경 옵션 인 것 같았다.
또한 Clojure가 데비안에 .deb 패키지를 쉽게 설치할 수 있다는 점에 매우 기쁩니다. 그래서 훨씬 쉽게 플레이 할 수 있습니다. 이것은 큰 승리입니다. 아래에서 다소 분노하기 쉬운 일부의 적대감에도 불구하고 낮은 진입 장벽이 승리입니다. 나는 숟가락으로 먹는 것을 좋아합니다.
SICP를 더 많이 읽은 후 꼬리 재귀에 대한 문제를 훨씬 더 잘 이해합니다.
Clojure 는 활발하게 개발 된 Lisp의 현대 방언입니다. JVM을 기반으로하므로 모든 Java 라이브러리를 즉시 사용할 수 있으므로 유니 코드도 지원합니다.
이것은 하나의 진정한 대답이 아니라 하나의 대안입니다.
화염 전쟁을 피하고 도서관을 즐기는 경우 Clojure와 함께 가십시오. 작고 빠르며 커뮤니티는 도움이되고 독단적이지 않습니다. 그것은 Lisp에서 1980 년대의 터무니없는 균열을 뺀 것입니다. 그것은 BDFL을 가지고 있으며 좋은 아이디어가 있다면 언어로 구현 될 가능성이 있습니다.
나는 Common Lisp를 가지고 놀았는데, 그것은 아름다운 것입니다. DrScheme의 SICP에서 처음 3 개의 챕터와 Metacircular Evaluator를 완료했습니다. 그것도 아름다운 것입니다. 물론 이것들을 배우면 큰 도움이 될 것입니다.
그러나 시간이 지남에 따라 나는 작은 언어를 마음에 품게되었습니다. 나는 거짓말을하지 않고 자바 스크립트를 좋아하고 C를 좋아한다 (그리고 모든 언어가 C 코어를 가지고 있지 않다면 젠장 할).
Clojure는 작습니다. 우아합니다. 그것은 우리 시대를위한 언어입니다.
Clojure 는 함수형 프로그래밍을 촉진하는 LISP의 훌륭한 방언입니다. JVM에서 실행되므로 사용하던 모든 Java 라이브러리에 액세스 할 수 있습니다. 이 사이트에는학습에 도움이되는 훌륭한 문서와 스크린 캐스트 가 있습니다. 또 다른 장점은 다른 많은 방언과 달리 설치가 정말 쉽다는 것입니다.
만약 당신이 그럭저럭 찾고 있다면 Emacs (특히 EmacsLISP) 개념 은 또 다른 대안입니다. 놀라운 문서, 자습서 및 많은 코드 샘플이 함께 제공됩니다. 스크린 캐스트도 쉽게 찾을 수 있습니다. Emacs의 가장 큰 장점 중 하나는 편집기가 LISP로 작성되어 있으므로 편집기가 LISP 실행, 편집 및 디버깅을 매우 잘 지원한다는 것입니다. 또한 편집기를 확장하여 LISP를 배우는 동안 매일 필요한 텍스트 편집을 더 쉽게 할 수 있습니다.
하나를 선택하고 배우십시오. 차이점을 파악할 때쯤에는 처음에 잘못 선택했다면 다시 선택할 수있는 위치에있게됩니다.
Contra Chuck, Common Lisp의 장점은 구현이 고수하고 노력하는 표준이 있다는 것입니다. 따라서 SBCL (뛰어난 유형 검사 및 추론 기능이 있음)으로 크게 개발 한 다음 다음과 연결된 실행 파일로 배포 할 수 있습니다. C 라이브러리 (ECL 또는 기타 포함) 또는 Java 라이브러리 (ABCL 포함)를 사용하는 .jar 또는 Mac 또는 Windows 네이티브 GUI (Clozure, 둘 다)를 사용합니다. Common Lisp는 아키텍처와 구현 및 시간이 지남에 따라 놀랍도록 이식 가능하며 Common Lispers는 언어의 지원을 통해 이러한 방식으로 일을 유지하기 위해 노력합니다. 예를 들어, 표준화되지 않은 행동의 한 가지 어리석은 차이는 "이것이 특별한 변수인가?"라는 질문입니다. 그래서 내가 사용하는 구현 전반에 걸쳐 대답했습니다.
#-abcl
(defun special-variable-p (symbol)
#+ecl(si:specialp symbol)
#+ccl(proclaimed-special-p symbol)
#+sbcl(equal '(:special t)
(multiple-value-list-int:info :variable :kind symbol)))
이것은 읽기 시간에 ABCL (이미 가지고 있음)에서 아무것도 없음, (defun special-variable-p (symbol) (si:specialp symbol))ECL 등으로 감소합니다. 그래서 이것을 .rc 파일에 넣고 REPL에서 공통 기능을 사용할 수 있습니다. 그러나 이것은 그다지 중요하지 않습니다. 이것은 스레딩 이나 다양하게 지원되는 네트워킹 또는 Communicating Sequential Processes 라이브러리 가 아닙니다 . 이 마지막 예제는 #+sbcl/#-sbcl5 개의 구현에서 실행되는 경우에도 하나만 있습니다. 신중하게 이식 된 코드에 의존하기 때문입니다.
그러나이 (및 기타) 이점을 허용하는 것은 학습자에게 자체적 인 도전을 제기합니다. Common Lisp는 매우 큰 언어입니다. 내가 Clojure처럼 1 ~ 2 주 안에들을 수있는 것은 아닙니다. (하지만 내 Clojure는 이미 출시 될 브레이킹 체인지로 쇠퇴하고 있습니다. 그 언어는 자체 장점이 무겁지만 Common Lisp에 대해 제가 좋아하는 많은 것입니다.) 따라서이 페이지를 많이 읽고 HyperSpec을 키를 누르지 않고 (저에게는 M-x hyperspec RET do-symbols RET성경에 충분히 가까움) 몇 권의 책을 사는 것에 대해 생각해야합니다. 나는 Practical Common Lisp 를 가지고 있으며 Let Over Lambda를 얻었 으며 지금 곧 PAIP 을 구입할 것 입니다.
그러나 Common Lisp가 True Answer 라고해도 현혹 적으로 화려한 대안을 '그냥 선택'하여 시간을 완전히 낭비하지는 않을 것입니다 (일반 CL은 매크로가 할 수있는 모든 것을 보여주지 않기 때문에 '기만적'입니다. 누구보다 많은 종류의 매크로 가 있습니다. 일반적인 비교는 잘못된 CL과 구문 최적화 된 대안 X)입니다. 당신은 여전히 기초를 배우게 될 것입니다. 당신은 여전히 SICP, On Lisp, The Little Schemer 등에서 읽을 수있는 많은 것을 사용할 수 있습니다 . lisp, 심지어 잘못된 lisp는 여전히 non-lisp보다 낫습니다. (하지만 올바른 리스프의 일부를 잘못된 리스프에서 구현하는 데 시간을 소비하게됩니다. Meta-Greenspun.)
Lisp의 가장 큰 문제는 모든 사람이 고수하는 최우선 표준이 없다는 것입니다. Common Lisp와 Scheme 중 하나만 선택할 필요는 없습니다. Common Lisp의 여러 가지 호환되지 않는 구현과 Scheme의 여러 가지 호환되지 않는 구현, 그리고 Arc 및 Clojure와 같은 다른 작은 것 중에서 선택해야합니다.
MzScheme로 시작하는 것이 좋습니다 . 인기 있고 적극적으로 개발되었으며 최신 프로그래밍 환경의 기능을 제공하는 많은 라이브러리가 있으며 Scheme은 Common Lisp보다 다소 간단합니다 (더 나은 것은 아니지만 더 간단합니다).
Emacs를 확장 할 수 있도록 elisp를 배우십시오.
Clojure와 함께 가십시오. 모든 Java 라이브러리에 대한 전체 액세스 권한이있는 놀라운 언어입니다. 2 년 넘게 개발 중이며 이미 3 개의 IDE 플러그인이 개발 중이며 4 월에 책이 출판 될 예정입니다. 매우 빠르고 우아하고 아름답습니다. Clojure로 잘못 갈 수는 없습니다.
저에게는 Scheme의 기본 이론이 훨씬 더 설득력이 있습니다. PLTScheme은 지금까지 제가 발견 한 가장 활발하게 개발 된 LISP입니다. 불행히도 Lisp의 아름다움을 모호하게 만드는 타이핑의 확산이 있습니다.
나는 아크와 같은 것이 성공하는 것을보고 싶지만 그럴 것 같지 않습니다.
IronScheme을 살펴 보십시오 .
추측 : 첫 번째 lisp를 배울 때 최종 개발에 사용할 하나를 배우지 마십시오.
Lemma: learn Arc. It's all of the "hard to grok" things in lisp - closures, macros, continuations, with none of Clojure's Java interop complexity, CL's namespace confusion, or Scheme's name fragmentation. If you're dedicated, you can learn all of these things in a weekend. If you're sharp and dedicated, in a night.
And it'll make learning all the other lisps a lot easier.
I do not know Lisp but heres why I think PLT Scheme is a good choice:
Really Good Documentations
http://download.plt-scheme.org/doc/html/DrScheme
DrScheme is an amazing programming environment that comes with a compiler, stepper, syntax checkers, REPL, myriad of languages support and is extensible. This makes the entire experience fun. See some screenshotsGood Support from the community.
The community is very enthusiastic about their language and very supportive too. If you have any questions, mailing lists, groups and forums are available. Even the authors are very very accessible.Continuing Research
PLT is very active and continue to make their tool better and better. You can expect a lot of innovations from the labs. eg. Im pretty excited about using this: http://blog.plt-scheme.org/2009/05/typed-scheme-20.htmlFree Books and interesting tutorials to get you started.
http://www.htdp.org/
http://world.cs.brown.edu/Good modules and extensive libraries.
http://www.cs.utah.edu/plt/develop/
http://planet.plt-scheme.org/ also see docs
If you are learning Scheme, give DrScheme a try.
You know... When I got interested in Lisp I also thought I'd have to choose. Then, after reading and asking a lot, I ended up choosing Common Lisp. Not because it's "better" than Scheme in an absolute way, but because it had features I knew I'd probably use in the next 2-3 years in my projects:
- A very efficient compiler for numerical computation (SBCL),
- The condition system, and...
- I have to admit that SLIME also played an important role in this decision. :-)
So if I were you, I'd start learning a tiny bit of each language, and find out what are the relative strengths and weaknesses of each (I mean, those related to what you'll need/want to do most often) so you I could pick one. You may just find out that you'll learn the other later also (happened to me -- I had to learn more Scheme after one year studying Common Lisp)
As to Arc, Clojure and Lush, and don't know those. I suppose the same argument could apply to them too... The reasons I didn't want to invest too much on them were: Arc does not seem to be interesting for numerical computing, and P. Graham seems obssessed by code size (to the point of making his code unreadable); Clojure seems nice, but I don't like the JVM. And Lush... Well, besides using dynamic scope, the compiled and interpreted versions of the language are very different -- and you can't compile recursive functions. So, it was either Scheme or Common Lisp to me.
I think you either want Common Lisp or PLT Scheme.
The former comes with a lot of freedom and power (that might overwhelm you at first) and the latter comes with a bunch of libraries, matching tutorials and a well-integrated IDE.
Pick anything but Clojure, go with it, and you will be in a better position to evaluate later.
You phrased this question as which Lisp is the best medium for learning Lisp, and to me that has to include a Lisp that is built up from low level primitives, whereas large parts of Clojure are written in Java.
If you had phrased this question as which is the best Lisp to start a new project in, then Clojure may be the best choice.
I am a fan of Scheme, but it has been more than 10 years since I did anything with Scheme.
like others have said - just pick one and go.
There are very few real choices there, either SBCL, Clojure or PLTScheme.
참고URL : https://stackoverflow.com/questions/563356/which-lisp-should-i-learn
'program story' 카테고리의 다른 글
| 일반 유형 검사 (0) | 2020.11.04 |
|---|---|
| PHP : 괄호 안의 텍스트를 추출하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.04 |
| mysql에서 선택 (0) | 2020.11.03 |
| AngularJS의 ScrollTo 함수 (0) | 2020.11.03 |
| zsh를 종료하고 실행중인 작업은 열어 두시겠습니까? (0) | 2020.11.03 |