【问题标题】:Check whether symbol is `quote`?检查符号是否是`quote`?
【发布时间】:2015-09-28 08:03:33
【问题描述】:

我想(或多或少)展平一个列表。输入由可能被引用的嵌套列表组成,我希望最后有一个全局变量列表。我检查first 是否以* 开头,但我最终得到一个包含quote 的列表。


编辑:

我必须处理的数据结构如下:

(defparameter *colors* '(*red* *green* *blue*))
(defparameter *animals* '(*mouse* *elephant*))
(defparameter *list-to-flatten* '('*colors*
                                  '*animals*
                                  *some-other-parameter*))

我已经创建了*red**mouse* 这样的基本参数名称,因为原始数据中的名称不太理想,但我仍然不得不使用它们与系统交互。这些参数是列表,即*mouse* --> (animal mammal small 4),不会被展平。所以我编写了一个函数,将嵌套列表简化为这些基本参数的列表,并且该列表包含引号。

从那时起,我发现我最初获得的数据已经严重过时,我不得不重新开始。当前数据的参数名称命名要合理得多,所以我不再需要处理原来的问题了。


我看错了答案here

【问题讨论】:

  • 请给我们一些细节。你的输入是什么?预期的输出是多少? * 和它有什么关系?根据此处给出的描述(以及您的说法,另一个 SO 问题与您的问题无关),我很难理解您正在尝试做什么以及问题可能是什么。
  • 你如何得到一个包含报价的列表?如果数据结构有一个名为quote 的符号,那么很明显生成的扁平列表将具有该符号。例如(flatten '(a b 'c)) ; ==> (a b quote c) 没有错,因为数据评估中的第三个元素是(quote c),其中quotec 只是符号。

标签: common-lisp quote


【解决方案1】:

我在写这个问题时得到了解决方案,所以万一其他人搜索这个:检查函数名称的函数的明显名称是symbol-name

【讨论】:

  • 是的,但任何数量的符号都可以有名称“QUOTE”。如果我创建一个名为“FOO”的包,那么我可以有一个符号 foo:quote。根据您的问题,检查 (eq some-symbol 'cl:quote) 是否会更好。
  • 您链接到的问题确实有答案;它显示(eq (first list) 'quote)
  • @JoshuaTaylor:你想添加这个作为答案还是我应该将它编辑到这个答案中并接受它?我想使用'cl:quote'quote 好?
  • 关于 cl:quote 与 quote 的后一点应该无关紧要。由于您几乎可以肯定“使用”通用 lisp 包,因此它们将是相同的。
猜你喜欢
  • 1970-01-01
  • 2012-03-24
  • 2018-03-10
  • 2015-01-15
  • 2011-06-03
  • 2017-11-16
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多