Lisp

 

Lisp 은 1958 년에 John McCarthy 가 발명한 함수형 (functional) 프로그램언어 이다 (C 언어는 1972년에 발명되었다)계산 (Computation)실제적인 모델 (Alan Turing 의 것과 비교해서) 로서는 최초로 개발된 것으로서, 나중에는 1970 연대와 1980 연대에 인공지능 (Artificial Intelligence) 의 전성기동안에 프로그래머가 가장 선호하는 언어가 되었다. Lisp 은 오늘날 웹 개발에서부터 금융분야까지 많은 분야에서 사용되며, 컴퓨터과학 교육에는 흔히 사용된다.

lab   paper   site   Prolog

Lisp 이란 명칭은 "List Processing"에서 온 것이다. 연결리스트 (Linked list) 는 Lisp 의 주요한 자료구조중의 하나이며, 똑같은 기본적인 리스트 동작이 모든 Lisp 방언들 (dialects)에서 작동한다. Lisp 방언들에서 또다른 공통점은 dynamic typing (실행시 자료형 체크) 을 포함하고, functional programming 을 지원하며, source code 를 데이터로서 조작가능하다는 것 등이다.

Lisp 은 또한 즉시 인식가능한 형식 (instantly-recognizable appearance) 를 가진다. 프로그램 코드는 리스트 (lists, 표) 와 같은 문법 (괄호안에 넣은 S-expression 문법) 을 사용하여 작성된다. 프로그램 (또는 자료구조) 에 있는 모든 sub-expression 은 괄호와 함께 시작한다. 이것 때문에  Lisp 은 parse 하기가 쉬우며, metaprogramming (다른 프로그램을 작성하는 프로그램을 만드는것) 하는 것을 간단하게 만든다. 이것이 70, 80 연대에 커다란 인기를 얻은 주요한 이유이며, AI 프로그래머들은 Lisp 이 자연스럽게 스스로 전파하는 (self-propagating) 프로그램에 적합하다고 믿었던 것이다.

1958 년에 탄생한 Lisp 은 오늘날까지도 사용되는 두 번째로 오래된 high-level 프로그램언어이다 : Fortran 만이 더오래되었을 뿐이다. Fortran 처럼 Lisp 도 엄청난 변화를 겪었으며, 수많은 방언들이 존재해왔다. 오늘날 범용 프로그래밍에 가장 널리 알려진 Lisp 방언은 Common Lisp 과 Scheme 이다.

Lisp 의 역사

Information Processing Language 는 1955~1956 에 만들어진 최초의 AI 언어이며, Lisp에서 사용된 list-processing 과 recursion 같은 개념들을 이미 포함하고 있었다.

Lisp 은 1958 년에 John McCarthy 가 MIT 에 있을 때 발명했다. 그는 "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I". (Part II 는 발표되지 않았다) 라는 논문에서 설계하여 1960 년에 Communications of the ACM 에 발표했다. 그는 간단한 operator 들과 함수를 위한 표기들로써 (a couple of simple operators and a notation for functions) 전체 프로그램 언어를 만들 수 있다는 것을 보여주었다.

McCarthy 의 원래의 표기는 바깥쪽으로 [] 괄호 (bracket) 를 사용하는 "M-expressions" (M 은 meta) 을 사용했다. 이것은 곧 폐기되고 그가 원래는 내부표현으로 제안하였던 () 괄호 (parenthesis)를 사용하는 "S-expressions" (S 는 symbol) 을 선호하게 되었다. 예를들면 M-expression 에서의 car[cons[A,B]] 은 S-expression 에서의 (car (cons A B)) 과 같다. 

Lisp 은 원래 IBM 704 컴퓨터에서 Steve Russell 에 의해 구현되어, 두 개의 명령어 car (Contents of Address Register) 와 cdr (Contents of Decrement Register) 를 리스트를 분석하기위한 기본동작으로 사용하였다. 대부분의 Lisp 의 방언에서도, 하나의 리스트에서의 처음 item 과 그 리스트의 나머지를 각각 리턴하는 동작으로서 여전히 carcdr 를 사용한다.

Lisp 으로 작성된 최초의 완전한 Lisp 컴파일러는 1962 년에 Tim Hart 와 Mike Levin 이 구현하였다 (Hart 와 Levin 의 메모). 이 컴파일러는 incremental compilation 의 Lisp 모델을 선보였는데, 그것은 compiled 와 interpreted functions 를 자유롭게 섞어서 사용할 수 있다. Hart 와 Levin 의 메모에서 사용된 언어는 McCarthy 의 초기 코드 보다는 현대적인 Lisp 스타일에 훨씬 더 가까운 것이다.

그 이후에 Lisp 은 AI 연구와 밀접하게 연결되었다. 1970 연대에 AI 연구는 상업적인 부산물 (offshoots) 들을 낳았고, 기존 Lisp 시스템의 성능은 더 주목을 받게 되었다. 일부 garbage collection 문제와 일부 내부구조의 표현 문제 때문에, Lisp 은 그당시의 메모리가 제한된 하드웨어 상에서의 실행이 어렵게 되었다. 그로인해 Lisp 환경과 프로그램을 실행하기위한 하드웨어인 Lisp machine을 만들어 사용하게 되었다. 현대의 컴파일러 제조기술과 더불어, 오늘날의 거대한 컴퓨터 용량은 (1970 연대과 비교하여) 그러한 전문적인 하드웨어가 불필요하게 되었고 지금은 아주 효율적인 Lisp 환경이 존재한다.

1980 연대와 1990 연대에 수많은 Lisp 방언들을 단 하나의 언어로 통일하려는 큰 노력이 있었다. 그 새로운 언어가 Common Lisp 으로서 기본적으로 수많은 방언들의 superset 이었다. 1994 년에 ANSI 는 Common Lisp 표준 "ANSI X3.226-1994 Information Technology Programming Language Common Lisp."를 발표했다. 이때에는 Lisp 의 세계시장은 그 전성기에 비해서는 훨씬 더 작아졌다. Lisp 은 여전히 사용되는 가장 오랜 언어 중의 하나이며 Algol, Fortran, Cobol 들이 비슷한 처지이지만 Fortran 과 Cobol 은 여전히 사용되고 있다.

지금은 어디에나 존재하는 if-then-else 구조는, 지금은 어떤 프로그램 언어에나 기본적인 요소로서 취급되지만, Lisp에서 McCarthy 가 발명하여 처음 모습을 드러낸 것이다. 그것은 Algol 에서 계승하여 대중화 되었다. ...... (Wikipedia : Lisp programming language)

Lisp은 재귀 방정식의 사용을 통해 추론을 형식화 하기위한 것으로서 ....... 그 발전 역사는 컴퓨터와 인간 언어 사이의 심볼 처리의 발전과 관련되어 있다.  이질적인 리스트 데이터 타입이 다양한 모델을 효율적으로 처리하기 위해 만들어 졌다 ..... Lisp의 기본 개념을 마스터 하기는 쉽다. Lisp은 전혀 가르칠 필요가 없는 언어라고도 한다. 그러나 Lisp을 마스터하기위한 대부분의 과정은 프로그래머가 이용할 수 있는 많은 수의 libraries of utilites 를 배우는 과정이다.

video :

Lisp Tutorial - Learn Lisp in One video : Code, Book : Practical Common Lisp : Derek Banas, 2015/07/21

 

Structure & Interpretation of Computer Programs by scheme (2nd ed) : UC Berkeley : Brian Harvey, 2008/07/31 ... Playlist 41 ... 컴퓨터 프로그램의 구조와 해석 (2판)

 

Structure & Interpretation of Computer Programs by scheme (1st ed) : MIT OCW : Harold Abelson, Gerald Jay Sussman, 1986/00/00 ... Playlist 20 ... 컴퓨터 프로그램의 구조와 해석 1, 2 (초판)