Lisp 符号区分大小写。甚至 lisp 阅读器也区分大小写。唯一的一点是,当读者阅读一个符号时,它通常是大写的。告诉读者重要的案例的最简单方法是将其放在垂直线之间。
> '|asd|def|ghj|
|asdDEFght|
> '|asd|
|asd|
> '|ASD|
ASD
> 'ASD
ASD
> (eq 'asd '|ASD|)
t
> (eq 'asd '|aSd|)
nil
谓词检查参数是否是相同的eq
对象(类似于比较指向变量的指针C
)
> (defparameter *x* 1)
> (defparameter *y* 1)
> (eq *x* *y*)
nil
'(asd)
因此,当您在列表中写入REPL
一个元素时,就会创建。当您第二次编写它时,会创建另一个列表,这些列表实际上是不同的对象。
> (defparameter *list1* '('qwe))
> (defparameter *list2* '('qwe))
> (eq *list1* list2*) ;this are 2 different objects
nil
> (setf (first *list1* 'def))
> *list1* ;this list has changed
(DEF)
> *list2* ;and this did not
(QWE)
> (setf *list1* *list2*) ;now they are just different names for one object
> *list1*
(QWE)
> (eq *list1* *list2*)
t
还有另一种比较对象的方法(eq
eql
equal
equalp
=
)。最好阅读文档并使用REPL
以查看差异。