Describe lisp here ;;우선 두서없이 막 쓸 예정... 구조화는 나중에... lisp은 함수형 프로그래밍 언어로서, 간결한 문법에 수학적인 면모가 돋보이는 언어이다. lisp은 여러가지 종류의 언어들로 파생되었는데, clisp(커먼 리스프), scheme(스킴), Elisp(이맥스 리스프-스크립트언어), clouser, arc(완성되었는지 모름)... 등 여러종류의 아류언어들이 있다. lisp의 장단점을 살펴봅시다. 이 부분은 제가 제시할만큼의 깊은 통찰을 아직 갖지는 못해서, 다른분이 쓴 부분을 인용합니다. 장점은.. 1. 편합니다..스트럭쳐나, 뭐 기타등등 잡스런 문제들에 신경안쓰고 바로 문제해결을 위한 알고리즘을 구현할수있습니다. 따라서 1인 생산성이 *매우* 높아집니다.. 2. 매우 유연합니다. 다른 OOP 언어 특히 C++, JAVA의 경우 최초의 클래스 구조를 한번 설계하면 개발이 진행되면서 그 구조를 바꾸는게 매우 어렵습니다. 사실상 전부 뜯어내야죠. 그에반해 LISP 의 CLOS, MOP 등은 매우 유연합니다. 바꾸기가 매우 쉽습니다. 3. 예전부터 지적되던 속도문제는..요즘 컴파일러 와 CPU 가 워낙 좋아져서 문제가 안됩니다. 대부분의 LISP 제품들이 최종 컴파일하면 머신코드까지 생성하기 때문에 매우빠릅니다. 4. 대형 시스템 개발에 좋습니다. 개발하다보면, 저절로 모듈화가 되서, 전에 했던일을 신경안쓰고 마치 블럭조립하듯 개발이 됩니다. 개인적으로 이점이 정말 좋습니다. 5. 안정적이다.. 개발과정에서 거의 모든 문제들이 도출되기때문에 개발이 완료된후에는 매우 안정적인 시스템이 됩니다. 메모리릭 이나 프로세스 크래쉬 같은 문제가 거의 없습니다. 따라서 미션크리티컬 시스템 개발에 최고입니다. 단점은.. 1. 다른사람들과 공동작업이 어렵습니다. 개발자본인은 심오한 람다함수의 세계에 경탄을 금치 못하겠지만. 다른사람이 만든코드를 이해하기는..매우 어렵습니다. 세세한 문서 작성이 필수.. 의외로 다른 언어로 만들어진 라이브러리 이용은 쉽습니다. FFI 를 쓰면 쉽지요.. 2. 개발자 구하기가 어렵다..특히 한국은. 학문 레벨에서 만져본 분들은 많지만, 대형 실무용 제품을 개발해본 사람이 거의 없습니다. 따라서 유지보수가 문제가 될수 있죠. 3. 컴파일러가 비싸다.. 거의 공짜(?)에 가깝게 구할수있는 다른 개발툴에비해 컴파일러가 고가입니다. 제대로 쓸만한 제품은 $3000~$10000 까지 합니다. 4. Garbage Collection 이 문제가됩. GC 를 하는 대부분의 언어의 문제 이지만 GC 가 일어날때 순간적으로 프로그램이 멈추는 문제가 있습니다. 여러가지 기술로 그 시간을 최소화하고 있지만. 적절히 메모리 관리 안해주면. 문제가 됩니다. 한마디로..뛰어난 개발자 몇명이 대규모 개발팀이 할일을 해내는데 사용할때 적합합니다. 뛰어난 C 개발자는 일반 C 개발자의 3~5 배정도 생산성이 높아지지만. 뛰어난 LISP 개발자는 일반 LISP 개발자의 10~20 배까지 생산성이 높아집니다. >>내 생각 : 근데 마이너한 언어가 원래 그렇지않나... 그리고 가비지컬렉션의 문제는 이를 쓰는 모든 언어들또한 공통적인 문제고... 어쨋든 더 공부해보고 여러가지를 생각해본뒤에 생각정리를 해야 공감이 되고 안되는 부분이 더 명확해질것같다. -인용부 end- lisp의 문법을 살펴보자. (message "Hello world") >>Hello world 위는 Elisp에서 쓰이는 lisp 표현문이다. message라는 심볼에 Hellow world라는 인수를 보낸 결과 바로 아래에서 Hello world라는 결과를 확인할 수 있다. 이렇게 한 표현문을 쓰고 곧바로 결과값을 확인 할 수 있는 환경을 이맥스에선 IELM(inferior Emacs lisp mode)라고 한다. 다음 clisp의 문법을 보자. (+ 3 4) >>7 앞서 말한것과같이 clisp도 elisp의 구문과 비슷하다. 다만, 이번에는 +라는 심볼을 쓴 다른 예시를 가져다 둔것일 뿐이다. 그리고 clisp에서는 결과값을 바로 확인할 수 있는 환경을 REPL(real eval print loop)라고 한다. lisp은 심볼, 특별한 연산자(spcial operator), 리스트, 아톰으로 구성되어있다. 심볼은 값이 될 수도 있고, 함수가 될 수도 있다. 리스트는 lisp의 가장 base되는 데이터 자료구조로서, 콘셀(con-cell)로 구성된다. 콘셀이란, 마치 싱글 링크드리스트처럼 생겨먹은 녀석인데, 이런 구조를 통해서 리스트를 구성한다. // 미완. 차근차근 완성해갈 예정. 리슾은 아름답습니다. ...