Search

'lisp'에 해당되는 글 1건

  1. 2009.12.23 Common Lisp의 세계

Common Lisp의 세계

Computer/Language 2009. 12. 23. 14:15 Posted by mathboy
동생이 프로그래밍이 궁금하다 한다. 난 '컴퓨터 프로그램의 구조와 해석' 을 추천했다. 읽어보진 않았지만 유명한 고전서적이라 들었다.

(+ 10 20) 이 나온다.

음 그렇구나..

(* (+ 10 20) (- 20 10))

음 그렇구나..

(/ (* (+ 10 20) (- 20 10)) (* (+ 10 20) (- 20 10)))

음 그렇구나..


그런데 도무지 컴파일러 하는 환경이라던지 다른 언어 서적에는 충분히 기본적으로 들어있을 만한 설명이 하나도 없다.

단지 Lisp 라는 언어를 사용한다 할 뿐이다. 뭐지뭐지뭐지.................

이 Lisp 언어를 사용해 보기 위한 셋팅을 하는데 어젯 밤부터 지금까지 거의 반나절이 걸렸다...

이제 그 셋팅 과정을 소개하고자 한다. ㄱ-

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

먼저 Lisp 는 어떻게 다운 받는가?

   There is no Lisp download
    Lisp 다운로드 판은 존재하지 않는다.

   That is, there is no one true Lisp download. There are many.
    정확히는, 진정 유일한 Lisp의 다운로드 판은 존재하지 않는다. 상당히 많은 수가 존재한다.

그럼 개발환경은 어떻게 구성하지?

   There is no Lisp IDE
    Lisp 통합 개발환경은 없다.

   That is, there is no one true Lisp development tool. There are many.
    정확히는, 유일한 Lisp개발툴이 존재하지 않는다. 많은 수가 존재한다.



Lisp 란 정말 원초적인 것이라서 명확하게 정의되지 않은 그래서 이리저리 파생된 언어란 말인가?

도무지 이해할 수 없었다. 한참을 뒤지다가 이런 궁금증을 해결해줄 기사 하나를 찾았다.


주 에디터로는 emacs 가 사용되고 이것을 delivery(complie 같은 개념인가 보다) 하기 위한 SBCL 등의 추가적인 설치물이 필요하다고 한다. (Lisp를 사용하기 위한 툴들은 Windows, Linux, OSX 등 다양한 환경에서 설치가 가능하나 이 글에서는 Windows용 32비트 binary 파일을 기준으로 작성합니다)

1. emacs 다운 및 설치 http://ourcomments.org/cgi-bin/emacsw32-dl-latest.pl

2. clisp 다운 및 설치 http://sourceforge.net/projects/clisp/files/

3. slime 다운 및 설치 http://common-lisp.net/project/slime/

4. Hyperspec 다운 및 설치 http://www.lispworks.com/documentation/HyperSpec/

이제 기본적인 설치는 끝났다. tex 문서 작성에 사용되는 걸로만 알고 있던 emacs를 여기서 보게 되다니 감회가 새롭다;;

1번과 2번은 exe를 선택하여 설치했고, 3번은 TortoiseCVS(http://www.tortoisecvs.org/download.shtml) 를 사용하여 checkout 했다.

3번 설치시 주의사항은 C:\Program Files\Emacs\site-lisp 에서 checkout을 하는 것이고

CVSROOT 는 :pserver:anonymous:anonymous@common-lisp.net:/project/slime/cvsroot
MODULE 은 대문자가 아닌 소문자 slime 를 쓰는 것이다.

4번은 기본사항은 아니다. (설치위치 : C:\Program Files\clisp-2.48\doc)
추가. (setq common-lisp-hyperspec-root "http://www.lispworks.com/documentation/HyperSpec/")와 같이 인터넷 접속으로 사용할 수 있다. 접속속도 차이 정도?


이제 환경설정이다.

c:/Documents and Settings/사용자/Application Data/.emacs 를 Emacs로 열어 수정한다.
상관없이 c:/ 에 .emacs 를 생성하면 된다. Application Data 안에 파일을 수정하면 so becareful 이라고 경고하듯이 프로그램 자체에서 .emacs를 수정할 수 없는 상태가 되는 것이 아닐까 짐작한다.

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(appmenu-mode t)
 '(cua-mode t nil (cua-base))
 '(current-language-environment "Korean")
 '(emacsw32-max-frames t)
 '(emacsw32-style-frame-title t)
 '(hfyview-quick-print-in-files-menu t)
 '(menuacc-mode t)
 '(noprint-hide-print-in-menus t)
 '(noprint-hide-ps-print-in-menus t)
 '(ourcomments-ido-ctrl-tab t)
 '(rebind-keys-mode t)
 '(recentf-mode t)
 '(sex-mode t)
 '(tabkey2-mode t)
 '(w32-meta-style (quote w32-lr))
 '(w32shell-shell (quote cmd))

  ;; 여러 가지 색깔을 이용하여 프로그래밍이 용이하도록 폰트락 모드를 활성화한다.
  '(global-font-lock-mode t nil (font-lock)))

  ;; 괄호의 열고 닫음을 눈으로 확인할 수 있게 해주는 Lisp 프로그래밍에 필수적인 모드
  (show-paren-mode)

;;; Slime 셋업
(add-to-list 'load-path "C:/Program Files/Emacs/site-lisp/slime")
(require 'slime)
(add-hook 'lisp-mode-hook (lambda () (slime-mode t)))
(add-hook 'inferior-lisp-mode-hook (lambda () (inferior-slime-mode t)))

    ;; inferior lisp
    (setq inferior-lisp-program "C:/Program Files/clisp-2.48/clisp.exe -M c:/Program Files/clisp-2.48/base/lispinit.mem"
         lisp-indent-function 'common-lisp-indent-function
         slime-complete-symbol-function 'slime-fuzzy-complete-symbol
         slime-startup-animation nil)

    (setq common-lisp-hyperspec-root "C:/Program Files/clisp-2.48/doc/HyperSpec")
    ;(setq common-lisp-hyperspec-root "http://www.lispworks.com/documentation/HyperSpec/")
)

Kaisyu 님이 제공하는 .emacs 셋팅

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
  ;; 여러 가지 색깔을 이용하여 프로그래밍이 용이하도록 폰트락 모드를 활성화한다.
 '(global-font-lock-mode t nil (font-lock))
 '(column-number-mode t)
  ;; 한글 두벌식
 '(default-input-method "korean-hangul")
  ;; 한글 세벌식 390
 ;'(default-input-method "korean-hangul3")
  ;; 한글 세벌식 최종 <-- 별도의 patch 설치 필요
 ;'(default-input-method "korean-hangul3f")
 '(emacsw32-mode nil)
 '(emacsw32-style-frame-title t)
 '(recentf-mode t)
 '(ruler-mode-show-tab-stops t)
  ;; 괄호의 열고 닫음을 눈으로 확인할 수 있게 해주는 Lisp 프로그래밍에 필수적인 모드
 '(show-paren-mode t)
 '(transient-mark-mode t))
(custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 )

(add-to-list 'load-path "C:/Program Files/Emacs/site-lisp/slime-2.0/")  ; your SLIME directory
(require 'slime)
(setq slime-net-coding-system 'utf-8-unix)
(setq inferior-lisp-program "C:/CLISP/clisp.exe") ; your Lisp system
(setq common-lisp-hyperspec-root "http://www.lispworks.com/documentation/HyperSpec/")
;(setq browse-url-generic-program "C:/Program Files/Mozilla Firefox/firefox.exe")
;(setq browse-url-browser-function (quote browse-url-generic))
;(setq browse-url-generic-args '("-newpage"))
;(setq browse-url-browser-function
;      (lambda (url &optional new-window)
;    (message url)
;    (browse-url-generic url)))
(add-hook 'inferior-lisp-mode-hook (lambda () (inferior-slime-mode t)))
(add-hook 'lisp-mode-hook
    (lambda ()
              (set (make-local-variable 'lisp-indent-function) 'common-lisp-indent-function)))
(slime-setup :autodoc t)

; frame setting
(setq default-frame-alist
     (append '(
           ;; Choose only one for your default font set.
               ;(font . "-*-Courier New-normal-r-*-*-13-*-*-*-c-*-fontset-standard")
           ;(font . "-*-Fixedsys-normal-r-*-*-12-*-*-*-c-*-fontset-msfixedsys12")
               ;(font . "-*-Courier New-normal-r-*-*-12-*-*-*-c-*-fontset-mscourier12")
           (width . 110)
           (height . 45)
           (background-color . "gray85")
           (foreground-color . "Black") (cursor-color . "red"))
         default-frame-alist))

;; ruby mode <-- mode 설치 필요
;; http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/misc/ruby-mode.el
;(autoload 'ruby-mode "ruby-mode" "Ruby mode" t)
;(setq auto-mode-alist (append '(("\\.rb$" . ruby-mode))
;           auto-mode-alist))

;; PHP mode <-- mode 설치 필요
;; http://sourceforge.net/projects/php-mode/
;(require 'php-mode)
;(add-hook 'php-mode-user-hook 'turn-on-font-lock)
;(add-hook 'php-mode-user-hook
;     '(lambda () (define-abbrev php-mode-abbrev-table "ex" "extends")))



// 20:07 최종판
컴퓨터 환경마다 다른지 어떤지는 모르겠으나 아직 웹상에서 발견하지 못한 방법으로 겨우 설치를 마쳤다.

1. %HOMEPATH%\Application Data 에 들어있는 .emacs 는 환경설정 부분을
2. c:\.emacs 에는 추가적인 셋팅 부분을 입력해 주었다.

1.
(custom-set-variables
 '(transient-mark-mode t))
 '(global-font-lock-mode t nil (font-lock)))
  (show-paren-mode)

2.
(setq inferior-lisp-program "C:/Progra~1/clisp-2.48/clisp.exe")
(add-to-list 'load-path "C:/Progra~1/Emacs/site-lisp/slime/")
(require 'slime)
(slime-setup)

정말 주의해야 할 사항은 경로에 빈 칸이 존재하면 안된다.
Program files 를 Progra~1 와 같은 식으로 써야 한다.


// 09.12.24 추가
이동식 드라이브에 설치 가능. slime checkout은 제외.
texlive2008 설치시  D:\usr\texlive\HOME\ 와 같은 경로가 .emacs생성 경로가 됨.
d:\.emacs 작동하지 않음


// 14:15

이렇게 일단 기본적인 세팅은 끝났다.

위에 쓰인 말처럼 워낙 설치 툴과 그 설치 방법이 다양해서 이렇게 설치한 것이 맞는지조차 확신할 수가 없다;;

이제 사용법을 익힌 후에 다음 포스팅을... orz


// 20:10 추가

하루 종일 해서 설치를 겨우 마치다니... 매력적인 언어가 아닐 수 없다... 이렇게까지 팅기다니...

"이렇게까지 날 고생시킨 건 네가 처음이야" 같은 느낌일까나.....;

 
눈물겨운 설치 성공 장면 ㅠㅠ
설치하다 포기하시는 분들도 간혹 있지 않을까;;

잘 안되지만 Lisp 를 해보고 싶다면 Lispworks 를 사용해 보세요!




▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬


참고주소
http://www.claremontmckenna.edu/math/ALee/emacs/emacs.html
http://cafe.naver.com/ArticleRead.nhn?clubid=17282411&page=1&userDisplay=40&menuid=2&boardtype=L&articleid=267#
http://74.125.153.132/search?q=cache:tGSIBi06O4AJ:whitecatz.com/tattertools/tag/slime+slime+%EC%82%AC%EC%9A%A9&cd=5&hl=ko&ct=clnk&gl=kr&client=firefox-a
http://www.zdnet.co.kr/ArticleView.asp?artice_id=00000039131821
http://mix1009.net/38
http://faq.ktug.or.kr/faq/EmacsW32

사용법 관련 주소
http://emacs.kldp.net/wiki/wiki.php/doku.php?id=emacslisp:xah_lee_tutorial_01#emacs_lisp_%EA%B8%B0%EC%B4%88_%EA%B5%90%EC%8A%B5%EC%84%9C
http://faq.ktug.or.kr/faq/emacs%B5%FB%B6%F3%C7%CF%B1%E2

전체적인 소개
http://wiki.kldp.org/wiki.php/EmacsWin32Install
http://www.lisperati.com/

Lisp 활용에 관해
http://lisp.tistory.com/

Lisp의 탄생 배경과 전체적인 스토리 흐름
http://www.ibm.com/developerworks/kr/library/s_issue/20070403/
http://blog.naver.com/suritam9

SICP E-Book
http://mitpress.mit.edu/sicp/

Practical Common Lisp E-Book
http://www.gigamonkeys.com/book/
http://www.youtube.com/watch?v=VeAdryYZ7ak

emacs 말고 다른 프로그램
  Lispworks
   http://www.lispworks.com/downloads/index.html

  Lisp in Box
// 다른 프로그램이라기보다 다른 설치 방법?
   http://simonyim.tistory.com/7
     참고 포스트 : http://rookiecj.tistory.com/21
   Lisp IDE
    http://www.daansystems.com/lispide/

Lisp를 좋아하는 사람들의 그룹
http://groups.google.com/group/lisp-korea?hl=ko

Lisp 모임
http://cafe.naver.com/lisper.cafe

만화로 Lisp를 배우는 일본 사이트
http://lambda.bugyo.tk/cdr/mwl/

UC Berkeley E-learning
http://webcast.berkeley.edu/course_details_new.php?seriesid=2008-D-26263&semesterid=2008-D
   참고 포스트 : http://kybinz.cafe24.com/lisp/

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

SICP 번역서 서문
http://kizoo.blogspot.com/2007/03/sicp.html

옮긴이가 소개하는 동영상 강의 : http://www.youtube.com/view_play_list?p=8BA2EADDC8FA1155

찾을 때마다 추가하니 끝이 없네요;;
쉽게 보이지는 않으나 그 정보의 양은 정말 방대하군요 ;;
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬


CLISP 가 svm.dll이 없다고 할 경우 (http://article.gmane.org/gmane.lisp.clisp.general/13007)
해결책.
C:\program files\clisp-2.48\libsvm의 svm.dll을 복사해서 C:\program files\clisp-2.48\full에 복사

C-v 를 했는데 붙여넣기가 될 경우
해결책.
&Options에서 CUA를 해제한다.
=> All Emacs Style 을 선택하면 고생한다.. ㅡㅡ;

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
추가 09.12.24.

하하... SICP를 따라하기 위해선 결국 필요한 건 PLT Scheme (Dr Scheme) 였다..;

(+ 3 5) 오 성공!!

(define size 2) 딱 쳐보고 좌절...;;

emacs 에 설치한 환경은 정말 Common Lisp 을 위한 것이었다.

가령 C-x C-f 로 sum.lisp 생성
(defun sum ( x y )
    (+ x y))

CL-USER>(sum 2 3)
5


이거였다...

후.. 다시 plt scheme 설치... (http://www.plt-scheme.org/)


왜 이 프로그램을 소개하는 한 페이지 한 단락이 없었을까.. ㅠㅠ

아마도 emacs에서 scheme을 쓰려면 어떤 다른 조작을 가해주면 될 것 같지만.. 이렇게.. 프로그램만 설치하면 되는 것을 놔두고.. 크.... orz

아무튼 3일 간의 설치를 위한 머나먼 대장정이 막을 내렸다.

- END -

09.12.24. 11:10