2009-07-09 3 views
16

필자는 오랫동안 유닉스 시스템 관리자였으며 쉘 스크립트, 가벼운 PHP 작업 및 간단한 C 프로그램으로 작업을 자동화하는 것 외에도, 프로그래밍 방식으로 많은 일을 한 적이 없습니다. 나는 최근에 내 마음을 약간 늘리고 Common Lisp을 배우기로 결정했다.주목할만한 Lisp 초보자를 위해 작동하는 Common Lisp 환경 설정하기

나는 Touretzky의 "Gentle Intro"의 중간 단계에 있으며 I/O에 관한 장에 다 다르기 때문에 책과 연습 문제를 다루면서 입력 내용을 넘어서 REPL로 넘어 가고 싶습니다. 문제는 내가보기 싫은, 작업 환경을 얻는 방법에 관해서는 알맞은 하우투/튜토리얼을 찾을 수 없다는 것이다.

필자는 emacs (거의 20 년 동안 vi를 사용 했으므로 힘든 변경), SLIME 및 여러 CL 구현을 설치했습니다. 그러나이 조각들 중 하나의 설명서는 거대하며,이 세 부분 모두를 통과하려고 노력하는 것을 잊지 마십시오. 나는 몇 가지 무료 온라인 CL 도서를 건너 뛴다. 그리고 그들 모두는 당신이 REPL에 자료를 입력하거나 소스 파일을로드한다고 가정 할 때 환경에 대해 불가지론 자다.

Common Lisp 용 Emacs 환경을 설정하여 한 창에서 Lisp 모드로 편집 할 수있는 괜찮은 소개를 찾을 수 있다면 정말이 경험을 훨씬 즐겁게 할 것입니다 (함수 및 변수 자동 완성은 실제로 여기서는 nice), 다른 표현식에서 하나의 표현식 (출력과 반환 값 모두)을 평가 한 결과를 볼 수있을뿐 아니라 결과를 어딘가에서 볼 때 전체 버퍼를 평가하고 "실행"할 수있게됩니다.

모든 포인터는 크게 감사하겠습니다.

편집 : 내 플랫폼은 FreeBSD/amd64이고 오픈 소스 솔루션을 선호합니다.

답변

3

Lispbox을 사용해 보셨습니까?

+0

여기에 반복되지 않습니다 이맥스 명령에 대한 추가 좋은 팁을 가지고 있지만, 그들은 FreeBSD를 설치하지 않았고, 내가했다 내 플랫폼에서 실행하는 데 어려움이 있습니다. 나는 더 많은 경험을 얻을 때 "부드러운 소개"를 마친 후에 다시 시도 할 수 있기를 바랍니다. –

2

글쎄, 시작하기 좋은 곳은 정보 페이지의 executing lisp 섹션입니다.

일반적으로 Emacs에서 인터프리터 언어로 작업 할 때 소스 파일을 편집하고 열등한 프로세스 (Emacs가 생성하는 새로운 프로세스,이 경우에는 림 프로세스)와 상호 작용합니다. 간단한 키 누름으로 섹스 (균형 잡힌 표현), 영역 또는 전체 버퍼를 평가할 수 있습니다. 이러한 명령은 코드를 lisp 프로세스로 보내 평가합니다.

이 사용 모델은 껍질 작동,은 Tcl, 혀짤배기, 통역 아무것도 ...

wiki has a lot of good information.

+0

SLIME은 Emacs가 만든 다른 "열등"인터프리터보다 훨씬 완벽합니다. 대부분의 것은 편집 창에 통합되어 있으므로 실제 인터프리터 ('* inferior lisp * ')를 전혀 참조하지 않아도됩니다. – jrockway

+1

달콤한, -2 특별한 이유없이. -3을 얻을 수 있습니까? –

+0

+1 유용한 참고 자료를 제공해 주셔서 감사합니다. –

-2

저는 Emacs가 Lisp을 작성하기에 좋은 환경이라고 말할 수 있습니다. 저는 대학에서 그 목적을 위해 사용했기 때문에 말입니다. *scratch* 버퍼는 테스트 코드에 적합한 장소입니다. 컴파일러는 파일을 호출하는 방법을 말해야하므로 파일을 디스크에 쓴 다음 셸 창에서 실행하거나 Emacs 모드 중 하나를 사용하여 편집 컴파일 및 실행을 통합 할 수 있습니다. (미안하지만 15 년이 지났습니다.)

+0

'* scratch *'버퍼는 Common Lisp가 아니라 Emacs Lisp 용 버퍼이다. 그러나 CL 스크래치 버퍼를 제공하는 SLIME contrib 확장이 있습니다. – jrockway

+0

또한 누구도 Emacs와 명령 행을 사용하여 Lisp을 개발하지 못합니다. 모든 것은 슬림 내부에서 할 수 있습니다. – jrockway

+0

나는 '아무도'텍스트 편집기와 명령 줄을 사용하여 개발하지 않는다고 말하고 싶습니다. 나는 그것에 익숙한 해커를 알고 있습니다. 단지 'Common Lisp 환경'을 만들지 않습니다. –

29

이맥스가 실행 중이며 CVS에서 SLIME을 체크 아웃하고 설치했다고 가정 해 봅시다. 이것은 모든 Linux 배포판에서 쉽게 이루어져야합니다. apt-get install emacs slime 나를 위해 그것을한다. (당신은 또한 SBCL을 설치해야합니다. 가장 일반적인 Common Lisp 구현입니다.)

슬리 임은 더 이상 사용하지 않으므로 구성이 필요합니다. 이맥스 구성은 ~/.emacs 파일에서 수행됩니다. 해당 파일 (C-x C-f ~/.emacs).나는 케이크의 다양한로드 같은 것을, 있습니다

당신이 점액이 "사이트 디렉토리"에 설치되어 있지 않은 경우
(eval-after-load "slime" 
    '(progn 
    (setq slime-lisp-implementations 
      '((sbcl ("/usr/bin/sbcl")) 
      (ecl ("/usr/bin/ecl")) 
      (clisp ("/usr/bin/clisp")))) 
    (slime-setup '(
        slime-asdf 
        slime-autodoc 
        slime-editing-commands 
        slime-fancy-inspector 
        slime-fontifying-fu 
        slime-fuzzy 
        slime-indentation 
        slime-mdot-fu 
        slime-package-fu 
        slime-references 
        slime-repl 
        slime-sbcl-exts 
        slime-scratch 
        slime-xref-browser 
        )) 
    (slime-autodoc-mode) 
    (setq slime-complete-symbol*-fancy t) 
    (setq slime-complete-symbol-function 
    'slime-fuzzy-complete-symbol))) 

(require 'slime) 

, 당신은 도 그 라인 전에를 추가 할 수 있습니다 :

(add-to-list 'load-path "~/elisp/slime/") 
(add-to-list 'load-path "~/elisp/slime/contrib") 

는 (물론 올바른 위치에 이러한 경로를 변경할 수 있습니다.)

중요한 부분이는 REPL 포함 옵션 모듈의 다양한로드, 점액-설정입니다. (나는 또한 멋진 들여 쓰기, 및 autodoc 필수적인 고려합니다.)

어쨌든, 당신은 M-x eval-buffer으로 실행 이맥스 에이로드, 각 sexp 내부의 점을 넣고 C-M-x를 눌러 수 있습니다. (당신은 또한 sexp의 끝을 가리키고 C-x C-e를 누를 수 있습니다.이 이맥스, 에서 이맥스 리스프를 평가하기위한 다양한 방법이 있지만 그 CL 학습에 정말 관련이 없습니다.)

을이 시점에서, 당신이해야 M-x slime을 입력하고 REPL로 가져올 수 있습니다. 그런 일이 일어나기 전에, 당신의 리스프가로드되고, 슬릭은 이 슬랭크 (SLIME의 CL면)를 컴파일하도록 말하면, 이 발생합니다. 이것은 한 번만 발생하지만, 다음 번 SLIME은 을 더 빠르게 시작할 것입니다.

REPL에서 Common Lisp 명령을 입력하고 결과를 볼 수 있습니다. TAB을 누르면 무언가를 완료하면 완료 가능성 창이 생깁니다. 이것은 똑똑한 완료이므로 "d-b"와 같은 을 입력하면 "destructuring-bind"가 포함 된 목록이 나타납니다. 매우 도움이됩니다. M- /는 이미 Emacs 내부에 입력 한 심볼 을 완성합니다. 또 다른 좋은 시간은 세이버. (이것은 이맥스 어디서나 사용할 수 있으며, "동적 인 약어 확장"이라고 부릅니다.)

이전에 REPL이 지루했기 때문에 실제 파일을 열어 보겠습니다. C-x C-f test.lisp을 누릅니다. 당연히 이것은 버퍼 편집 test.lisp을 엽니 다. 처음에는 파일 (C-x C-s)을 저장할 때 만들어집니다. 이 Lisp 파일은 SLIME을 인식하고 있으므로 입력하는 은 실행중인 Lisp에서 쉽게 확인할 수 있습니다. 탭 완성, 클래스 검사, 대화식 테스트 등이 모두 가능합니다.

예를 들어 (+ 1 2)과 같은 것을 입력하고 C-x C-e을 누릅니다. 은 실행중인 Lisp이 평가 한 결과를 윈도우의 하단 에 표시합니다. 이렇게하면 파일에 을 입력 할 때 개별 표현식을 테스트 할 수 있습니다.

다음 단계는 아마도 전체 함수를 작성하는 것입니다 : 당신은 다양한 방법으로 실행 리스프에이 기능을로드 할 수 있습니다

(defun my-1+ (x) 
    (+ x 1)) 

을; 나는 보통 C-M-x을 사용합니다.이제 REPL 버퍼 (C-x b *slime-repl sbcl* 또는 유사)로 다시 변경하고 (my-1+ 42)을 입력하고 결과 43을 인쇄하십시오.

실행중인 Lisp에 함수를 가져 오는 또 다른 방법은 을 컴파일하고 C-c C-k으로 전체 파일을로드하는 것입니다.

어쨌든, 그것은 SLIME과 Emacs를 사용하는 기초입니다. 분명히 더 많은 기능을 사용할 수있는 것은 이지만, 은 SLIME을 사용한 Lisp 프로그래밍의 맛을 제공합니다. 내가 언급 할 마지막 한가지는 이다. 이맥스는 주로 스스로 문서화하고 있기 때문에 더 배우고 싶다면 이멕스 가 도움이된다. Lisp 버퍼에있는 동안 을 입력하면 에 Lisp 편집 중에 사용할 수있는 전체 명령 목록을 얻을 수 있습니다. 각 기능에 대한 추가 정보를 얻으려면 링크 을 클릭하십시오.

재미있게 보내세요!

+0

+1 매우 도움이됩니다. BTW, 나는 REPL이 "지루하다"고 말하지 않았다. 단지 많은 양의 내용을 편집하는 것이 적절하지 않다고 생각했다. 어쩌면 나는 경험이있는 Lisp 코더가 실제 프로젝트에서 어떻게 작동하는지 전혀 모르고있다. 이 환경. BTW, 함수를 입력하고 변수를 REPL에 할당 한 후에 거기에 무엇이 들어 있는지 볼 수있는 방법이 있습니까? BASIC의 "list"와 같은 기능을합니다. (나는 알고있다, 나는 알고있다. .. eeeeew!) –

+0

@Geoff Fritz : 이것은 아마도 당신의 탐험보다 앞서 가고 있습니다. 그러나 당신이 일할 자신의 패키지 (네임 스페이스)를 만들고 그것을 REPL에서 사용한다면, 그 패키지에 정의 된 모든 심볼을 프로그래밍 방식으로 나열 할 수 있습니다 그것들 중 어느 것이 기능에 해당하는지보고, 그런 다른 내성적 인 일을하십시오. (기본 CL-USER 패키지가 자신의 작업보다 훨씬 많은 작업을하기 때문에 자신의 패키지라면 도움이됩니다.) REPL에서 많은 코딩 작업을 직접 수행하지 않고 별도의 버퍼에서 편집합니다. (예 : Franz의 ELI를 제외하고는 SLIME의 제안과 같이) 평가할 수 있습니다. – khedron

+3

SBCL은 매우 훌륭하지만 "최고"라고 말하지는 않습니다. – Svante

3

Lispbox & SLIME은 훌륭한 답변이지만, 좀 더 간단하게 즐기고 싶다면 LispWorks Personal 또는 Allegro CL Free Edition의 무료 버전을 고려해보십시오. 나는 리눅스에서 나 자신을 사용하지 않았지만 그들은 둘 다 GUI와 함께 나타난다. 힙 크기 나 기타 제한 사항이있을 수 있지만 (전체 버전은 무료가 아니기 때문에) 쉽게 해결할 수 있습니다.

+0

제안을 주셔서 감사합니다. 내 플랫폼은 FreeBSD입니다. –

+0

@ Geoff Fritz : LispWorks Personal과 Allegro CL Free 모두 FreeBSD에서 사용할 수 있다고 말합니다. http://www.lispworks.com/support/system-requirements.html http://franz.com/downloads/ – khedron

+0

저는 Pascal Costanza가 이들 중 하나를 사용하는 것을 보았습니다. 둘 다 기본적으로 Emacs + SLIME . 물론 편집기를 제외하고는 Emacs가 아닙니다. 그들은 빠른 시작에 좋지만 무료 구현보다 기능이 적게 들지는 않습니다. (만약 당신이 윈도우에 있다면, 방정식은 바뀌지 만, 당신은 FreeBSD에 있다고 말했죠, 그래서 ...) – jrockway

5

많은 사람들이 점액을 좋아하기 때문에 Vi/Vim을 포기하지 마십시오.

여기에 관해서는 이전에이 글을 작성했습니다. 이 체크 아웃 :

나는 여기에 특정 질문에 대답 할 수있을 것입니다.

2

수동 방식에서 즉시 사용 가능한 설치 프로그램에 이르기까지 다양한 방법으로 Lisp 환경을 설정할 수 있습니다. 당신을 얻을 다음과 점액 실행, 당신은 이맥스 가지고 SBCL가 이미 설치 가정

:

다음 대답은 항상 당신을 위해 모든 패키지의 아주 새로운 버전을 다운로드 clbuild위한 것입니다. (당신은 또한 등 bash는, darcs, CVS가 필요하지만, FreeBSD 포트는 지금까지 내가 아는 한,이 모든 것을 포함한다.)

$ darcs get --set-scripts-executable http://common-lisp.net/project/clbuild/clbuild 
$ ./clbuild/clbuild install slime 
$ ./clbuild/clbuild slime 

당신은 필요 없어 (실제로 안) 귀하의 이맥스를 수정 이것 때문에. 이전에 SLIME을 수동으로 설치 한 경우, .emacs에서 이전 변경 사항을 제거하십시오. clbuild가 슬라임 설정을합니다.당신이 좋아하는 경우

, clbuild가 또한 당신을 위해 최근 SBCL을 취득 해 구축 할 수 있습니다 : 귀하의 사용 문제에 관해서는

$ ./clbuild/clbuild install sbcl 
$ ./clbuild/clbuild compile-implementation sbcl 
# afterwards you can uninstall the FreeBSD-provided Lisp used for bootstrapping 

:

  • CX 5 2는 당신과 함께 재생할 수있는 두 번째 창을 제공
  • Cc Ck 컴파일 현재 버퍼로드
  • 탭 완성 기능이 내장되어 있지만 다른 완료 기능도 있습니다. 개인적으로 나는 C-C M-i 퍼지 완성을 아주 좋아합니다.
  • jrockway의 대답은 내가 Lispbox를 사용하여, 실제 커먼 리스프를 시작하려고