[Lisp] 변수 선언 함수 set과 setq, setf

[원본 링크]

셋다 일종의 변수를 선언할때 쓰는 함수들인데, 조금씩 기능이 다르다.

set
일단 set은, 변수명을 값으로 받아서 처리하는듯하다. 그래서 변수명을 선언할때는 작은따옴표로 평가를 방지해야한다.
가장 초기에 있었던 함수라고 한다. image

image 안되고 image

image 된다.

setq
근데 매번 따옴표를 쓰려면 귀찮고, 까먹기도 좋을것이다.
그래서 따옴표 표현을 포함한 setq가 생겨난듯하다... image

image

setf
대체로는 setq와 기능이 비슷하지만 리스트나 배열 등의 특정 멤버값도 수정할 수 있다는게 추가된 점이다.

일단 사용법은 setq와 동일하다. image

image

그리고 setf는 (car li)와 같이 간접참조된 값에도 대입이 되는데 image

image

setq는 단일 심볼에만 바인딩이 가능하다. 그래서 에러를 던진다. image

image

결론: setf만 쓰자


참조
https://stackoverflow.com/questions/869529/difference-between-set-setq-and-setf-in-common-lisp