Common lisp 什么是亚历山大:确保符号?

Common lisp 什么是亚历山大:确保符号?,common-lisp,Common Lisp,它似乎在做intern所做的事情。可能是(实习生(读sym))。但这是为了什么?我看到它被这样使用: (if (keywordp x) (alexandria:ensure-symbol x) x) 在什么情况下,某个东西可能是关键字而不是符号?a当然永远是符号 所讨论的功能如下: 也就是说,您的代码片段会这样做:如果x是a(在包中插入),那么它返回一个与当前包中插入的名称相同的“普通”符号(否则它返回x)。a当然总是a 所讨论的功能如下: 也就是说,您的代码片段是这样做的:如果x是一

它似乎在做
intern
所做的事情。可能是
(实习生(读sym))
。但这是为了什么?我看到它被这样使用:

(if (keywordp x)
  (alexandria:ensure-symbol x)
  x)
在什么情况下,某个东西可能是关键字而不是符号?

a当然永远是符号

所讨论的功能如下:

也就是说,您的代码片段会这样做:如果
x
是a(在包中插入),那么它返回一个与当前包中插入的名称相同的“普通”符号(否则它返回
x
)。

a当然总是a

所讨论的功能如下:


也就是说,您的代码片段是这样做的:如果
x
是一个(在包中插入的),那么它返回一个与当前包中插入的名称相同的“普通”符号(否则它返回
x
)。

在Lisp开发环境中,通常可以使用键盘组合meta-。在符号上获取其源代码。一些开发环境还支持
(ed'Some function name)
打开包含相应源代码的编辑器窗口。在Lisp开发环境中,通常可以使用键盘组合meta-。在符号上获取其源代码。一些开发环境还支持
(ed'Some function name)
打开包含相应源代码的编辑器窗口。
(declaim (inline ensure-symbol))
(defun ensure-symbol (name &optional (package *package*))
  "Returns a symbol with name designated by NAME, accessible in package
designated by PACKAGE. If symbol is not already accessible in PACKAGE, it is
interned there. Returns a secondary value reflecting the status of the symbol
in the package, which matches the secondary return value of INTERN.
Example:
  (ensure-symbol :cons :cl) => cl:cons, :external
"
  (intern (string name) package))