[Lisp] 변수 선언 함수 set과 setq, setf
셋다 일종의 변수를 선언할때 쓰는 함수들인데, 조금씩 기능이 다르다.
set
일단 set은, 변수명을 값으로 받아서 처리하는듯하다. 그래서 변수명을 선언할때는 작은따옴표로 평가를 방지해야한다.
가장 초기에 있었던 함수라고 한다.

안되고

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


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


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


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


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