Lisp로 주문 외기 - 10 - 추가

2009-05-26

추가

좋아요. 이제 이 설명서에서 대충 얼버무리고 지나간 것들에 대해 얘기해 봅시다…

무엇보다, Lisp 코드는 컴파일 되기도 하고 종종 실행시간에 번역(interpreted) 되기도 합니다. 같은 프로그램 안에서도 말이죠. 이 때문에, Lisp 환경은 컴파일러라고 불리지 않고, 구현(implementations)이라 불리고 있습니다. (비록 실행시간에 번역되는 Lisp코드가 보통은 일단 바이트코드로 컴파일되긴 하지만, 그건 일단 다른 얘기고…)

추가로, 언급할 만한 가치가 있는 다른 굉장한 Lisp 구현이 있습니다. Rainer Joswig 와 Bill Clementson가 함께 만든 자세한 목록(링크 깨짐)이 사용 가능하지요.

이 설명서에서 사용한 큰 꼼수 하나는 게임에 쓰인 문장을 기호로 적은 것입니다.

’(Lisp 사용자는 이렇게 문장을 쓰지 않습니다)

“Lisp 사용자는 문장을 겹따옴표 안에 씁니다”

기호(Symbols)는 Lisp에서 특별한 의미를 띄고, 함수, 변수, 또 다른 것들의 유일한 이름을 저장하기 위해 사용됩니다. 이 때문에, Lisp는 기호를 다루는 방법이 특별합니다. 그래서 문자 메세지를 다루는 것이 어설프지요(몽땅 대문자로 만들어버린다든지…). 문장을 다루기 위해 기호 대신에 문자열(String)을 사용하게 된다면 그런 어설픈 것에 영향을 받지 않겠지요. 하지만 문장을 다루기 위한 더욱 난해한 명령이 필요하게 됩니다. 거기다, 문자열을 다루는 것은 Lisp에서 훨씬 중요한 기호를 다루는 명령을 가르치는 것과는 크게 관련이없습니다.

하나 더 빠프린 것은, 전역 변수를 만들기 위한 명령어인 defparameter입니다. 대신, 변수를 선언하기 위해 그냥 setf를 썼습니다.(돌아는 갑니다만, 좋지 못한 모양새라…)

연관 목록(alists라고도 하는)도 생략해버렸습니다. 숙련된 Lisp사용자에겐 그게 좀 더 효율적이고 격조높기 때문에, 점이 찍힌 목록 형태로 쓰입니다. 이건 초심자를 혼란스럽게 할 수 있습니다. 하지만 여기서 읽을 수 있는 Cons Cell을 이해하기 위해서는 꼭 필요한 개념입니다.

다른 미뤄둔 것은 주문(SPELs)은 더 일반적으로는 “Lisp 진(眞) macros”라 불리고, defmacro 명령으로 만들어진다는 건데, 가르치기엔 좀 헷갈립니다. 왜 다른 이름을 쓰는 것이 좋은가에 대해 쓴 다음 이야기를 읽어주세요. 이제 마지막으로, 주문(SPEL)이 game-action 주문(SPEL)처럼 쓰인다면 일어날 수 있는 이상한 이름 충돌이 있습니다. 더 전문적인 lisp관련 자료를 읽는다면, 아주 자세하게 이게 설명되어 있을 겁니다.

Q. Lisp에 대해 더 공부하기 위해 뭘 더 봐야 할까요?

A.

cliki 사이트에서 볼 수 있는 굉장한 Lisp 책들이 아주 많습니다.(개중 몇은 내려받을 수 있죠).

아주 극도로 이론적인 문서에 관심이 있다면, Paul Graham의 On Lisp의 eBook을 권해드립니다. 그가 쓴 다른 책과 수필은 그의 웹사이트에서 볼 수 있고 상당히 멋져요.

더 실질적인 전략에 관심이 있다면, 많은 Lisp 사용자가 지금 Peter Seibel의 Practical Common Lisp에 환호하고 있습니다. 이 책의 몇 장은 인터넷에서도 볼 수 있어요.

Ubuntu 에서 또 윈도로... Voices
comments powered by Disqus