지역 변수 구조 ( Constructs for Local Variables )
setq로써 이루어지는 광역변수 ( global variable ) or 지역변수 형태로의 할당보다는 지역변수 (local variable)로 선언하여 사용하는 것이 더 바람직한 경우가 많다 .
물론 함수 정의 내의 인수 매개변수들은 지역변수들이다 . 함수 내에서 그 변수들에 할당된 값들은 오직 그 함수 내에서만 사용된다. 예를 들어서 , 다음 경우의 x와 y 변수들을 살펴 보자
(setq y ‘(a b c))
(setq x ‘(d e f))
è (defun local-var(x) (setq y (cons x y)))
è (local-var 6)
è (6 A B C)
è X
è (D E F)
è Y
è (6 A B C)
함수 정의 defun내에서 변수 x는 지역적이다 . 즉 함수내에서만 사용할수 있는 값이다.
X는 함수 local-var에서 빠져나온 후 처음의 값으로 되돌아 간다. 반면 변수 y는 광역적이다 .
y는 어떤 부함수 ( procedure ) 내에서도 접근이 가능하고, setq로써 reset 되지 않는한 그 값을 유지하게 된다.
Let 와 prog구조 또한 지역 변수들의 생성을 허용한다 . let함수의 일반형식은 다음과 같다.
(let ((var1 val1) (var2 val2) …. ) <s-expressions>)
여기서 각 var1는 서로 다른 변수명이고 , 각 val1는 var1에 할당된 초기값이다. 쉽게 말해서 var1에 할당되는 값은 val1이다.
let함수가 실행되면 각 값(val1..val2..val3….) 이 평가되고 , 그에 대응하는 변수(var1..var2..var3)에 할당되며 뒤에 기술되는 상징문(s-expressions)들이 순서대로 평가된다. 마지막 상징문의 평가된 값이 되돌려 진다 . 만약 여기서 초기값 var1에 할당되지 않으면 nil이 할당되고 , nil주위의 괄호는 생략될 수 있다.
다음은 let함수의 예제이다.
(let ((x ‘a) (y ‘b) (z ‘c)) (cons x (cons y (list z))))
è (A B C)
각각 x , y , z에 a b c가 순서대로 할당이 되며 , s-expressions 인 cons cons list가 실행이 되며 이 실행된 결과값이 (A B C)인 것을 알 수 있다.
Prog 함수는 prog 다음 괄호 안에 변수명 or 변수명과 그 초기값을 리스트 형태로 묶은 지역변수들이 선언된다는 점에서 let함수와 비슷하다. 그 다음에 prog 몸체로서 임의의 수의 상징문 ( s-expressions ) 들이 온다.
Prog는 리스트인 상징문들을 차례로 수행하는데 , return 문을 만나지 않으면 결과값으로 nil이 되돌려 진다. return문이 수행될 경우 , return함수의 하나의 인수가 평가되고 그 값이 되돌려 진다. Prog는 무조건적인 go문과 이동장소 (go-to)를 나타내는 레이블(label)의 사용을 허용하고 있다.
그러나 이 go문과 레이블문을 사용하면 비구조적 프로그램이 되기 때문에 크게 추천하지는 않는다.
다음은 prog의 예제이다.
(defun memb(a lst)
(prog ()
Start
(cond ((equal a (car lst)) (return lst)))
(setq lst (cdr lst))
(go start)))
여기서 a는 하나의 요소이며 , lst는 하나의 리스트이다.
Start à 하나의 요소 ( a ) 와 lst의 첫번째 요소와 동일하다면 lst 반환 à return문에 걸리지 않고 다음 문장을 평가한다 à 다시 lst에 첫번째 요소를 제외한 리스트를 할당한다 à 다시 Start로 넘어간다.
'학부공부 > 인공지능' 카테고리의 다른 글
LISP의 특성리스트(Property Lists) (0) | 2018.10.12 |
---|---|
LISP의 반복과 순환 ( Iteration and Recursion ) (0) | 2018.10.09 |
LISP 간단 정리 (0) | 2018.10.05 |
LISP 간단 정리 (0) | 2018.10.05 |
LISP 에서의 입력과 출력 (0) | 2018.10.03 |
#IT #먹방 #전자기기 #일상
#개발 #일상