在Lisp中,如果我们希望对一个变量赋值,可以使用set函数,用法如下:
(set ‘my-value "my string")
上面的代码是对变量my-value进行赋值,值是"my String"。注意其中的‘my-value前面是有一个单引号的。
我们知道,在Lisp中,‘my-value其实是(quote my-value)的简写,所以上面的set函数代码也可以写成这样:
(set (quote my-value) "my string")
不过,因为set函数使用的次数很多,每次都要使用quote或者在变量名前加一个单引号比较麻烦,于是发展了setq函数,setq中的q字母就是代表quote的意思,使用setq函数就可以这样写了:
(setq my-value "my string")
如果只是这样使用,可以认为set和setq是没有差别的,只是格式简化了。
但是,事实上setq比set函数要高级一些,setq函数还可以同时对多个变量进行赋值,像下面这样:
(setq my-value1 "my string 1" my-value2 "my string 2")
上面的代码同时对变量my-value1和my-value2进行赋值。而set函数就不能这样使用了。