디지털 양피지/CLisp2015. 2. 16. 20:21

1. CLisp 설치하기

clisp.org에 접속이 안된다. 

검색 끝에 sourcefoge에 올려진 코드를 찾을 수있었다. (http://sourceforge.net/projects/clisp/)

Windows 용 프로그램을 다운도르 받아 설치하고 실행하면 다음과 같은 실행 창을 볼 수 있다.

오랜 것처럼 보이는 문자형 그림과 REPL(Real-Eval-Print-Loop)라고 부르는 실행 명령 창이다.



2. 전역 변수 선언

2.1 defparameter

lisp에서는 전역으로 선언된 변수를 최상위 정의(top-level definition)라 하며, defparameter 함수를 이용하여 정의 한다.

변수를 둘러싼 '*'는 귀마개라는 애칭으로 불리우는데 lisp에서는 관습적으로 전역 변수에 귀마개를 붙여 지역 변수와의 혼동을 피한다고 한다. 


==>전역 변수 small과 big을 선언했는데 BIG과 SAMLL을 입력해도 같은 값을 얻을 수 있다. 대소문자 구분이 없는 것일까? 좀더 진행해보고 왜 이런일이 발생하는지 설명 하도록 하겠다.


==> 일반적으로 lisp에서 사용하는 전역 변수를 동적 변수 또는 특수 변수라고 한다고 하는데 나중에 다루게될 특별한 기능이 있다고 한다. 이또한 지켜 보도록 하자.


2.2 defvar

defparameter는 다시 선언하면 이전의 값이 새로운 값으로 대체되는 것을 볼수 있다. 하지만 defvar는 이전 값을 덮어쓰지 않는다. 


3. Lisp의 기본 수칙 괄호

Lisp 프로그래밍 책을 보면 ()를 가슴에 품은 코끼리와 닮은 듯한 슈퍼맨(?) 옷을 입은 그림을 볼수 있다. 처음에는 무슨 그림인가 했는데 언어의 형태를 보고 조금 이해가 간다. Lisp은 괄호를 사용하여 모든 명령을 실행한다. 

공백, 줄넘기 등은 완전 무시되고 라인 end 연산자도 없고 괄호로 모든 명령을 실행한다. 즉, Lisp은 ()를 품은 슈퍼 랭귀지라 볼 수 있다.



4. 전역 함수 선언

전역 함수는 defun 명령을 사용한다.

(defun function_name (arguments) ....)


아래는 guess-my-number 함수를 정의한 모습니다.


==> ash 는 산술 시프트 연산자로 C의 시프트 연산자 '<<' 이나 '>>' 과 같은 역활을 한다. 위에 예제에서는 *small* 과 *big* 의 덧셈한 값을 -1(오른쪽)으로 1만큼 움직인다. (양수 일경우 왼쪽으로 시프트 시킨다.)



==> 11(1011)을 왼쪽 시프트 하면 22(10110), 오른쪽 시크트하면 5(101) 가 된다.


5. return

Lisp에서는 return 과 같은 명령어를 사용하지 않고 함수 몸체에서 마지막 값이 자동으로 return 된다.


6. setf

setf 함수를 사용하여 변수 값을 변경할 수 있다. 아래는 *test* 전역변수를 만들고 setf를 사용하여 변경하는 모습을 보여준다.


7. 게임 만들기

사용자가 1~100까지의 숫자를 생각하고, 더 큰지 작은지를 입력하여 생각한 숫자를 맞추는 게임이다.



==> gess 함수는 guess 함수로 변경해야 한다..ㄷㄷㄷ


'디지털 양피지 > CLisp' 카테고리의 다른 글

CLisp - 지역변수, 지역 함수  (0) 2015.02.16
Posted by 빨간 양말