[Lisp] 전역변수와 상수

[원본 링크]

전역변수
리습은 전역변수의 선언을 특이한 방식으로 행한다.
바로 defparameter라는 특수한 함수를 사용하는 것이다...
이 함수는 2개의 인자를 갖는데, 하나는 *로 감싸인 변수명, 그리고 변수에 할당할 값이다.
(defparameter 변수명 값)
**는 귀마개 연산자라 부른다고 한다. 사실 * 떼도 동작은 잘 한다. 그냥 관례인거같다. image

image

중복선언도 가능하다. image

image


값 할당 및 변경 setf
그리고 변수의 값 할당과 변경은 setf라는 함수로도 수행할 수 있다. defparameter 여러번 쓰는거랑 뭔 차인지는 모르겠다.
마찬가지로 변수명과 값을 받아 할당한다...
(setf 변수명 값)
아래는 간단한 예시다. image

image 리습은 동적인 언어라 값의 타입이 바뀌어도 잘 돌아간다.


재선언 불가능한 전역변수
defvar이라는 함수를 사용한다. 형식은 전역변수와 동일하다. image

image

대신 재할당을 시도했을 경우, 에러는 던지지 않지만 값의 변경은 일어나지 않는다. image

image

setf는 잘 먹힌다. image

image


전역상수
defconstant라는 함수를 사용한다. 형식은 동일하다. image

image

근데 재선언해도 동작은 된다. 뭐지?
그래도 경고는 던져주긴 한다. image

image

다행히 setf 재할당은 아예 에러를 던진다. image