【问题标题】:How does one create a keyword symbol from a string? [duplicate]如何从字符串创建关键字符号? [复制]
【发布时间】:2014-06-05 17:10:17
【问题描述】:

从字符串中创建符号非常简单:

(intern "test") => test

我正在努力为 plist 创建 keyword 符号。寻找类似的东西:

(XXXX "test") => :test

请注意,(intern ":test") 不会生成 关键字 符号,而是生成包含冒号的符号(例如 |:test|)。

如何在 Common Lisp 中正确生成关键字符号?谢谢!

【问题讨论】:

  • 请注意,您不必在 plist 中使用关键字作为指标。 getf 适用于任何对象作为指标。因此您可以(getf '(1 one 2 two) 2) => two(getf '(a b c d) 'a) => b)

标签: common-lisp


【解决方案1】:

关键字是普通符号,除了它们存在于 KEYWORD 包中:

? (defvar x (intern "NEWKW" "KEYWORD"))
X
? x
:NEWKW
? (keywordp x)
T

另见here

【讨论】:

  • 太好了,谢谢!有趣的是,在我的实现(Allegro CL)中,包是小写的(即“keyword”而不是“KEYWORD”)。
  • @ElliotPenson 你在“现代模式”下运行吗?
  • @ElliotPenson 这是非标准行为,如果您没有在“现代模式”下运行,您可以将其报告为错误。标准包的名称是"KEYWORD"。请参阅 HyperSpec 中的11.1.2 Standardized Packages
  • @JoshuaTaylor 是的,原来我的“当前阅读器大小写模式”是 :case-sensitive-lower。
猜你喜欢
  • 1970-01-01
  • 2019-02-05
  • 2015-01-17
  • 2011-08-08
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 2013-03-18
相关资源
最近更新 更多