Lisp아니라 LISP이다.
11월부터 여유가 생겨서 “Micro Manual for LISP”이라는 문서를 근거로 LISP을 구현해보고 있다. 처음에는 Python으로 eval()함수만 작성해보고, 그다음엔 Java로 read()와 eval()을 작성해봤다. 마지막으로 Go언어로 구현해보는 중이다.
Python과 Java로 간을 본 수준이라면, Go언어로는 여러가지 양념을 쳐보면서 연습중이다. Go언어도 배우고, Git도 배우고, Parsing방법도 여러가지 시도해보고, “Original(?) LISP은 어떻게 구현되었을까?” 라고 하는 역사연구도 하고..
비교적 쉽게 1장짜리 구현이 끝난 다음에는 3장짜리 “MACRO Definition for LISP”을 발견해서 구현해보려는 중이다. 63년에 작성된 메모인데, LISP 1.5에 처음 MACRO를 도입하기 위한 아이디어 및 구현을 정리한 문서이다. 이 문서를 제대로 읽으려 하니 “LISP 1.5 Programmer’s Manual”을 읽지 않을 수가 없어서, 이것도 찾아서 읽는 중이다. 그런데 이 Manual은 100쪽이 넘는다. Manual은 62년에 초판이 나오고 지금 읽고 있는 것은 85년에 나온 2판이다.
Scheme에 비해서 LISP 1.5는 아직 덜 성숙된 모습이라서, 대충 마무리짓고 Scheme버전으로 넘어가고 싶기도 하다. 하지만 일단 시작했으니 LISP 1.5를 충실하게 따라가보고, 그리고 MACRO까지는 구현해보고 난 다음 Scheme으로 넘어가보려 한다. (1.5에 이미, LISP Interpreter, Compiler, Garbage Collection까지 들어가 있다. 이것까지 다 해보기는 좀 벅차다)
