之前看Practical Common Lisp,其中大部分的值绑定是用setf来实现的。当时一直不太明白为什么像(setf hello 1),这样的S-expression中的hello这样的Symbol是怎样理解的,最近看到An Introduction to Programming in Emacs Lisp中介绍,Symbol与值绑定时,所讲解的set与setq之间的区别,才豁然开朗:比如像此例(set 'hello 1)与(setq hello 1)。
其实(set 'hello 1) <=> (set (quote hello) 1),如此setq就相当于set与quote的缩写,setq是一个宏而已,例如我自己定义一个简单的宏:(defmacro mysetq (name value) `(set (quote ,name) ,value))。在此记录以防忘记,对于自己理解Lisp中的Symbol有所帮助。