특성리스트 (Property Lists)
특성리스트 함수들은 특성들을 원소에 할당 , Get , 대치 , 제거할 수 있다.
함수 putprop은 원소에 특성값을 할당한다. 이 함수는 세가지 인수들을 취하는데 , 차례대로
대상이름 ( 원소 ) , 특성 or 속성이름 , 특성 or 속성값을 갖는다.
예를 들어서 자동차에 대해 특성을 부여해 보면 다음과 같이 작성할 수 있다.
(putprop ‘car ‘ford ‘make) à FORD
(putprop ‘car 1988 ‘year) à 1988
(putprop ‘car ‘red ‘color) à RED
(putprop ‘car ‘four-door ‘style) à FOUR-DOOR
(
위에서 본 것처럼 일반형식은 다음과 같다
(putprop object value attribute)
여기서 value가 결과값으로 되돌려 진다. 대상 car는 새로운 특성들로 대치되거나 또는 2가지 인수를 갖는 remprop 함수로 제거되기 전까지는 이렇게 저장된 특성들을 계속 유지한다.
특성들은 광역적 할당으로 주어진다 .
예제를 통해서 어떻게 대치되고 , 제거되거 , 가져오는지 알아본다
(get ‘car ‘color) à RED
(get ‘car ‘make) à FORD
(putprop ‘car ‘blue ‘color) à BLUE
(get ‘car ‘color) à BLUE
(remprop ‘car ‘color) à BLUE / 여기서는 remprop을 사용해서 car의 color를 제거한다는 의미
(get ‘car ‘color) à NIL
특성값은 원소 형태뿐만 아니라 리스트 형태일 수 있다. 예를 들어서 , 만약 Danny가 애완동물 (pets)로 dog1 , dog2 , dog3 라 불리는 강아지를 가지고 있다면 다음과 같이 할당할 수 있다.
(putprop ‘danny ‘(dog1 dog2 dog3) ‘pets) à (dog1 dog2 dog3)
(get ‘danny ‘pets) à (dog1 dog2 dog3)
만약 어떤 사람이 Danny가 현재 가지고 있는 강아지들에 대해 모르면서 WhatDog 라는 강아지를 추가하려 한다면 , 다음과 같이 쓸 수 있다.
(putprop ‘danny (cons ‘WhatDog (get ‘danny ‘pets)) ‘pets) à (WhatDog dog1 dog2 dog3)
특성값들은 유사한 방법으로 값들의 리스트로부터 제거 될 수 있다.
버전에 따라서 putprop 함수를 제공하지 못할 경우가 있는데 , 우리는 스스로 정의할 것이 요구된다.
(defun putprop(object value property)
(setf (get object property) value))
위에서 사용된 함수 setf는 2개의 인수를 취하는 할당함수이다.
첫번째 인수는 원소 or 접근함수이고 두번째 인수는 할당될 값이다.
첫번째 인수가 원소(atom)인 경우 , setf 는 setq와 똑같이 적용이 된다.
첫번째 인수가 접근함수인 경우 , setf는 두번째 인수 즉 값을 접근함수에 의해서 접근된 곳에 둔다 ( 저장한다 )
예를 들어보자 . ( a b c)가 x에 할당되어 있다면 문장
(setf (car x) ‘d)는 (a b c)에 있는 a를 d로 대체할 것이다 .
한가지 예를 더 들어보면 이해가 쉬울 것이다.
(setf (get ‘car ‘color) ‘pink) à PINK
(get ‘car ‘color) à PINK
특성리스트는 우리에게 지식을 표현하는 편리한 메커니즘을 제공하고 있다.
'학부공부 > 인공지능' 카테고리의 다른 글
LISP의 대응함수 ( Mapping Functions) (0) | 2018.10.12 |
---|---|
LISP의 배열(Arrays) (0) | 2018.10.12 |
LISP의 반복과 순환 ( Iteration and Recursion ) (0) | 2018.10.09 |
LISP 의 지역 변수 구조 ( Constructs for Local variables ) (0) | 2018.10.09 |
LISP 간단 정리 (0) | 2018.10.05 |
#IT #먹방 #전자기기 #일상
#개발 #일상