web应用中符号的公共Lisp等式

web应用中符号的公共Lisp等式,lisp,common-lisp,equality,symbols,hunchentoot,Lisp,Common Lisp,Equality,Symbols,Hunchentoot,以下功能: (defun check-for-arrow (x) (format t "**~s**~s**~s**~s**" (length (string x)) x (eq x '->) (and (eq (elt (string x) 0) #\-) (eq (elt (string x) 1) #\>))) ; for debug (eq x '->)

以下功能:

(defun check-for-arrow (x)
  (format t "**~s**~s**~s**~s**"
          (length (string x))
          x
          (eq x '->)
          (and (eq (elt (string x) 0) #\-)
               (eq (elt (string x) 1) #\>))) ; for debug
  (eq x '->))
从REPL调用时,使用:

(check-for-arrow '->)
打印,带跟踪:

0> Calling (CHECK-FOR-ARROW ->) 
**2**->**T**T**
<0 CHECK-FOR-ARROW returned T
0>呼叫(检查箭头->)
**2**->**T**T**
调用(NORMALIZER::CHECK-FOR-ARROW->)
**2**->**零**T**

CommonLisp有多个包。包是一种用于符号的名称空间

因此,可以有许多名为“->”的不同符号,每个符号位于不同的包中

因此,
normalizer::->
不一定是
EQ
cl用户::->

符号也可以不固定在一个包中,因此一个包可以有许多相同名称的不同符号,而没有一个包

CL-USER 2 > '#:->
#:->

CL-USER 3 > (describe *)

#:-> is a SYMBOL
NAME          "->"
VALUE         #<unbound value>
FUNCTION      #<unbound function>
PLIST         NIL
PACKAGE       NIL

CL-USER 4 > '->
->

CL-USER 5 > (describe *)

-> is a SYMBOL
NAME          "->"
VALUE         #<unbound value>
FUNCTION      #<unbound function>
PLIST         NIL

注意:类似于
->
的东西是一个符号和一个原子。原子一词的含义与符号不同。一切不是细胞的东西都是原子。因此,数字
3
,字符串
“foo”
,向量
#(13)
。。。都是原子,但它们不是符号。非常感谢,我需要这个澄清!我可以看到,web应用程序的'->包是“COMMON-LISP-USER”,而函数中编写的'->包是“NORMALIZER”。顺便说一句,有一种简单的方法可以只检查符号的“名称”部分?回答我前面的问题,我认为执行此测试的“最佳”方法是:
(string=(符号名称x)(符号名称“->)
@renzo:symbol name
更短的函数是
string
@renzo:string=如果您愿意的话,它恰好愿意直接比较符号名(它使用包含符号的“字符串指示符”)。我认为我最倾向于围绕第二个符号的读取绑定*package*,如果在代码中这样做方便的话,可以使用eq。
CL-USER 2 > '#:->
#:->

CL-USER 3 > (describe *)

#:-> is a SYMBOL
NAME          "->"
VALUE         #<unbound value>
FUNCTION      #<unbound function>
PLIST         NIL
PACKAGE       NIL

CL-USER 4 > '->
->

CL-USER 5 > (describe *)

-> is a SYMBOL
NAME          "->"
VALUE         #<unbound value>
FUNCTION      #<unbound function>
PLIST         NIL
CL-USER 7 > (package-name (symbol-package '->))
"COMMON-LISP-USER"