使用字符串而不是符号的原因

问题描述 投票:0回答:1

我想知道如何传递一个字符串来检查符号是否存在,所以我创建了以下函数, 但所有的答案都是: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 common-lisp
1个回答
0
投票

由 Lisp reader 编写的符号(未驻留)被写为

#:symbolname

示例:

CL-USER 3 > (find-foo '#:non-interned-symbol)
NIL
NIL

CL-USER 4 > (find-bar '#:non-interned-symbol)
NIL
NIL

默认情况下,Lisp 符号被保留在当前包中,因为这允许我们使用与完全相同的对象具有相同名称(和包)的符号。

© www.soinside.com 2019 - 2024. All rights reserved.