왠지 요새 Lisp을 공부해야될것만 같은 기분이 들어 책을 빌려 보기 시작했습니다. ((Practical Common Lisp, Peter Seibel, APRESS, 2005)) Ruby에 Lisp에... 요새 갑자기 모르는 프로그래밍 언어 공부에 필받았네요. ;-)
이번 글은 제가 사용하기로 한 SBCL와 SLIME의 설치 방법입니다.
간단한 키바인딩은 다음과 같습니다.
^ 키 ^ 의미 ^
| C-c C-q | 괄호 닫기 |
| C-c C-c | 컴파일 |
| C-c C-l | 파일 로딩 |
| C-c C-k | 현재 버퍼 컴파일 & 로딩 |
이제 Lisp 프로그래밍을 해볼까요?
:-)
이번 글은 제가 사용하기로 한 SBCL와 SLIME의 설치 방법입니다.
Requirements
SLIME는 emacs의 mode로 Lisp 프로그래밍을 위한 IDE라고 보시면 됩니다. ((Intergrated Development Environment))Installation
SBCL
- 다운받은 sbcl-0.9.12-x86-linux-binary.tar.bz2의 압축을 풉니다.
- $ sh install.sh을 실행시킵니다.
- 이때 root 권한이 없어 자신의 홈디렉토리 밑에다 생성해야 할 경우에는 다음과 같이 INSTALL_ROOT 환경 변수를 셋팅한 후 install.sh을 실행시킵니다. 아래 내용은 자신의 홈디렉토리 밑에 생성한 경우를 대상으로 설명합니다.
$ export INSTALL_ROOT=${HOME}
- 환경 변수에 다음과 같은 내용을 추가합니다.
export PATH=${PATH}:${HOME}/bin export SBCL_HOME=${HOME}/lib/sbcl
- $ sbcl이 정상적으로 실행되는지 확인합니다.
SLIME
- 다운받은 slime-2.0.zip의 압축을 풉니다.
- 디렉토리의 이름을 slime으로 바꾼 후 적당한 디렉토리로 옮겨 놓습니다. 저의 경우에는 아래 디렉토리를 사용했습니다.
${HOME}/etc/slime - emacs 파일에 아래 내용을 추가합니다.
(add-to-list 'load-path "~/etc/slime/") ; your SLIME directory (setq inferior-lisp-program "~/bin/sbcl") ; your Lisp system (require 'slime) (slime-setup) (setq auto-mode-alist (cons '(".cl$" . lisp-mode) auto-mode-alist))
Usage
- emacs를 실행시킵니다.
- M-x slime을 입력하면 CL-USER> 프롬프트가 나오는 창이 생성됩니다. 이 창이 REPL 창입니다. ((Read-Eval-Print Loop))
- 끝내려면 콤마(,) 입력 후 quit를 입력합니다.
- 수행 도중 debug 모드에서 나오려면 'q' 를 입력합니다.
간단한 키바인딩은 다음과 같습니다.
^ 키 ^ 의미 ^
| C-c C-q | 괄호 닫기 |
| C-c C-c | 컴파일 |
| C-c C-l | 파일 로딩 |
| C-c C-k | 현재 버퍼 컴파일 & 로딩 |
이제 Lisp 프로그래밍을 해볼까요?
CL-USER> (+ 2 3)
5
CL-USER> (format t "Hello, world")
Hello, world
NIL
:-)
Practical Common Lisp은 어디서 빌리신 건가요? 이 책을 소장한 공공도서관이 있나요?
ReplyDelete아뇨... 회사 도서관에서.
ReplyDelete절반쯤 보다가 반납했습니다. ANSI Common Lisp이라는 책이 또 나왔던데... 책을 빌려보는 것의 단점으로 다른 사람이 예약하면 2주만에 반납해야 해서 자꾸 흐름이 끊기네요. 한권 사야 할런지... :-|
덕분에 아직 lisp의 강력함에 반하지 못하고 있습니다. :-)
iwongu님의 수준에 도움이 되실지 모르겠지만 전 처음에 http://www.lisperati.com/ 여길 접속해서 풍미를 익혔습니다.
ReplyDeletelisp에 관해선 아직 수준이랄만한게 없습니다. 추천해 주신 사이트로 저도 lisp의 세계에 발을 들여놓을 수 있었으면 좋겠네요. :-)
ReplyDelete