题
Common Lisp中是否有一个函数将字符串作为参数并返回一个关键字?
示例:(关键字“foo”)
- &gt; <代码>:FOO 代码>
解决方案
这是一个 make-keyword
函数,它将关键字创建过程(名称的 intern
)打包到 KEYWORD
包中。 : - )
(defun make-keyword (name) (values (intern name "KEYWORD")))
其他提示
大致正确的答案并没有为问题的例子提供正确的解决方案。
考虑:
CL-USER(4): (intern "foo" :keyword)
:|foo|
NIL
CL-USER(5): (eq * :foo)
NIL
通常你想在实习之前将STRING-UPCASE应用于字符串,因此:
(defun make-keyword (name) (values (intern (string-upcase name) "KEYWORD")))
Alexandria 中有 make-keyword
功能库,虽然它确实保留了大小写以便准确得到你想要的东西,你必须首先将字符串加起来。
在这个例子中,它还处理带空格的字符串(用点替换它们):
(defun make-keyword (name) (values (intern (substitute #\. #\space (string-upcase name)) :keyword)))
如果是,您可以将字符串更改为以冒号:
直接使用 read-from-string
。
以下是 make-keyword
的另一个版本:
(defun make-keyword (name)
(read-from-string (reverse (concatenate 'string
(reverse name) ":"))))
(intern "foo" "KEYWORD") -> :foo
请参阅字符串部分 Common Lisp Cookbook ,用于其他字符串/符号转换以及符号和详细讨论包。
不隶属于 StackOverflow