Shinnara's Blog
Talking with Shinnara :: NaraTalk.com

'Computer/Programming/Lisp'에 해당되는 글 3건

  1. 2008/10/29 Chapter 4. Syntax and Semantics
  2. 2008/10/29 Chapter 3 를 마치고..
  3. 2008/10/28 Lisp 을 시작하다..

 요즘 새롭게 시작한 Lisp.. 조금씩 조금씨 그 마술에 빠지는 듯 합니다. 물론 Lisp 자체가 매우 오래된 언어이고, 그 이후로 많으 새로운 언어들이 자신의 장점들을 내세우며 많은 개발자들을 사로잡고 있지만, Lisp 은 지금도 충분히 매력적인 언어임에 틀림없는 것 같습니다. 뭐, 아직 Lisp을 잘 알지 못하는 입장에서 이런 말을 한다는 것 자체가 우습긴 하네요.

 하여간 점점 빠져들고 있는 Lisp에 대해 보다 많은 사람들이 이러한 재미를 같이 했으면 하는 생각에서 글을 조금씩 적어볼까합니다. 거창하게 튜토리얼 같은 것은 아니고, 그냥 내용 요약 정리 정도가 되겠네요. 이후에 이것들을 모아서 좀더 짜임새 있는 자료도 만들어 볼 수 있지 않을까 기대도 해봅니다.

앞선 글에서 이야기 한대로  지금 보고 있는 책이 Practical Common Lisp 인데 Chapter 3까지는 아마도 매우 쉽게 따라 갈 수 있을 것 같습니다. Chapter 4 부터 본격적으로 Lisp이라는 언어에 대한 설명이 나옵니다. 오늘은 그ax 첫번째로 Chapter 4. Syntax and Semantics에 대해 내용 요약을 해보겠습니다.  워낙에 머리가 둔한 지라 책을 읽고 이해하며 정리하려면 아마 이 글을 완성하는 데 며칠 정도 필요하지 않을까 하면서 글을 시작해봅니다.

+                                    +                                   +

Breaking Open the Black Box

 대부분의 프로그래밍 언어에서 인터프리터나 컴파일러 같은 언어 처리기는 세 단계의 과정을 거치는 것이 일반적입니다. 제일 먼저 텍스트로 적혀진 프로그램을 읽어 들여 토큰(Token)으로 분해하는 Lexical Analyzer, 이 토큰들을 해당 언어의 문법에 맞게 트리(abstract syntax tree)를 만들어 내는 Parser를 거쳐 이를 통해 동작을 수행하거나, 컴퓨터가 알아 들을 수 있는 코드를 만들어내는 Evaluator 가 존재하게 됩니다. 하지만 이러한 과정들은 Black Box처럼 숨겨져 있어서 프로그램을 작성하는 사람은 단순히 언어 처리기(인터프리터나 컴파일러)에게 소스 프로그램을 전달하기만 하면 됩니다. C 로 프로그램을 짜더라도 그냥 gcc만 이용하면 위의 모든 과정이 끝나는 것 처럼 말이죠.

 Common Lisp에서는 조금 다른 데, 일반적인 언어들이 한개의 Black Box를 통해 소스 코드에서 컴파일된 기계어 코드를 만들어 내는 데 반해,  Common Lisp은 두개의 Black Box를 가지고 있습니다. 하나는 Lisp 프로그램을 적은 텍스트로 부터 Lisp Object를 만들어 내는 reader 이고, 다른 하나는 이러한 Object 에 대해 semantics를 구현하는 Evaluator 입니다.

  Reader는 Lisp 소스 코드의 내용이 S-expression 으로 불리는 Lisp Object로 어떻게 변환 될 수 있는지를 판단합니다. Evaluator는 Lisp Object들의 문법을 정의하게 됩니다.


S-expressions

S-expression 를 이루는 기본 원소는 list와  atom 입니다. list는 괄호로 구분되고 공백(whitespace)으로 나눠진 원소들을 포함할 수 있습니다. Atom이라함은 그 외의 모든 것을 지칭하게 됩니다. Empty list인 ()는 NIL로 표기할 수 있는데, 이는 유일하게 list이며 atom입니다.



+                                    +                                   +

일단은 여기까지 먼저 써야 겠네요 ^^ 계속 업데이트 하겠습니다..^^




 

0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/259 관련글 쓰기

댓글을 달아 주세요


 어제 lisp을 시작한다는 글을 썼는데, 짬이 날때마다 책 (Practical Common Lisp)을 들여다봤더니 Chapter 3까지 대강 마칠 수 있었습니다. 소감을 적어보자면.. 역시 시작하길 잘 했다.. 더 열심히 배워보자 라는 생각이 들었답니다. 본문에서 들고 있는 예제는 CD의 정보를 기록하고 관리하는 데이터베이스를 만드는 것입니다. 정말이지 몇 줄 안되는 코드로 사용자의 입력을 받고, 검색도 하는 프로그램을 만들어 내는 것이 너무도 재밌고 신기하더군요..
 지금 이 글을 집에 와서 쓰고 있는데, 어제 밤에 노트북에 깔린 OpenSolaris 업데이트 하다가 날려 먹는 바람에 좀전에 다시 깔고 제일 먼저 clisp을 깔았답니다. 몇번 해보니 이제는 OpenSolaris 깔고 설정하는 것도 어려운 일이 아니네요..
 Chapter 3의 마지막 부분은 조금은 이해가 안되는 부분도 있답니다. 좀 덜렁 덜렁 보다보니 그런 것도 있는 것 같고, 집중력이 떨어질 시간도 되어가고.. 일단은 책을 끝까지 쭈욱 볼 생각입니다. 그리고 다시 정독을 하던지..소스 코드를 직접 입력하고 실행하는 과정이 너무도 즐거워서 마치 정말 어릴 적 처음 컴퓨터를 배우던 시절도 돌아간 듯한 착각까지 듭니다. ^^
 
아래에 Chapter 3를 보면서 손수 코딩한 코드를 올려봅니다. Lisp 이 처음이신 분들은 그 구조가 좀 특이할 수 도 있을 것입니다.

더보기



저는 LISP이 좋아요~~~

p.s.또다시 노트북의 OS를 날려먹었답니다. 이상하게도 패키지 관리자로 작업 중 다른 일을 좀 많이(?) 시키면 잘 진행되다가 멎어버리고 그 이후는 부팅도 제대로 안되더라구요. 오늘 저녁에 또 한번 밀어버리게 생겼습니다.



0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/257 관련글 쓰기

댓글을 달아 주세요

Lisp 을 시작하다..

Computer/Programming/Lisp 2008/10/28 00:21 by Shinnara

뭔가 새로운 것에 대한 열망과 더불어, 나를 좀더 발전시키고 싶다는 생각에 Lisp에 도전해보기로 했다. 예전에 잠시 Scheme을 다룬 적이 있어서 그다지 어색하지는 않지만 처음부터 차근 차근 시작해보고 싶다.

일단 OpenSolaris를 깔아 둔 2005년 산 LG 노트북에 clisp 을 설치했다. 회사의 Linux 에도, Solaris 가 깔리 Sparc 머신에도 모두 clisp을 설치. 어떤 환경에서도 lisp을 돌려 볼 작정이다. 주로 노트북에서 작업을 할 계획인데 가지고 다닐 수 있을 지 의문이기도 하다.

clisp을 설치하는 것은 간단한데, Solaris 환경에서는 blastwave 에서 배포하는 버전을 설치했고, Linux (fedora 8)에서는 yum 을 이용하여 간단히 설치하였다.

모두 에러 없이 한번에 설치하였고, 간단히 돌려본 테스트 프로그램 역시 잘 동작하였다. 앞으로 하나 하나 배워 나가면서 글도 올려볼까 한다.

시작은 잘하면서 끝을 못맺곤 했는데.. 이번만은 좀더 잘 해 보고 싶다..

화이팅~! Lisp~~

참, 참고 서적으로는 Main Book을 Practical Common Lisp으로 정하였다. 책의 내용은 인터넷으로도 볼 수 있답니다..


0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/255 관련글 쓰기

댓글을 달아 주세요

1 
다...... (264)
Computer/Programming (106)
Links (14)
책 읽는 즐거움 (7)
끄적임 (66)
즐거운 과학 나라 (7)
일본 (5)
Study (4)