我想知道如何传递一个字符串来检查符号是否存在,所以我创建了以下函数, 但所有的答案都是:INTERNAL,所以没用。 我明白原因,但是有人知道为什么 lisp 会这样工作吗?
(defun find-foo (s)
(find-symbol (symbol-name s)))
(defun find-bar (s)
(find-symbol (string s)))
* (find-foo 'never-used-symbol)
NEVER-USED-SYMBOL
:INTERNAL
* (find-bar 'still-unused-symbol)
STILL-UNUSED-SYMBOL
:INTERNAL
由 Lisp reader 编写的符号(未驻留)被写为
#:symbolname
。
示例:
CL-USER 3 > (find-foo '#:non-interned-symbol)
NIL
NIL
CL-USER 4 > (find-bar '#:non-interned-symbol)
NIL
NIL
默认情况下,Lisp 符号被保留在当前包中,因为这允许我们使用与完全相同的对象具有相同名称(和包)的符号。