【发布时间】:2020-07-03 06:26:49
【问题描述】:
我有一个计算结果为 (quote ("all")) 的符号。我想将“测试”附加到列表的末尾,并获得 (quote ("all" "tests")) 但我没有找到如何:
(define make-flags ''("all"))
(append make-flags '("tests")) ; Resolves to (quote ("all") "tests")
我想我必须通过两次评估 make-flags 并重新引用它来删除引用,但我没有找到方法。
【问题讨论】:
-
请注意,
''("all")的计算结果为(quote (quote ("all"))),而不是(quote ("all")),因为开头有双单引号。这是你真正需要的吗? -
是的,就是这样定义的。我的意思是“一旦评估,它会解析为
(quote ("all")),但我是新手,我可能错了。 -
请注意
(quote ("all"))只是'("all"),但您正在编写''("all")。额外的报价使一切变得不同!但无论如何,我不确定你的用例是什么。我的回答解决了你原来的问题;) -
@ÓscarLópez 我不太同意你们的 cmets 关于这里的引用和评估。
''("all")确实评估为'("all"),就像'x评估为x和'3评估为3。我们必须引用这些值来谈论它们,但这并不意味着引用是它们实际值的一部分 -
@amalloy 方案将
(quote whatever)评估为whatever。'whatever是(quote whatever)的缩写,所以''x将评估(quote (quote x))成为一个愚蠢的列表(quote x)但某些 REPL 可能显示为'x。不犯错误。该值是一个包含两个符号的列表,符号quote没有比x更特别的地方。作为数据,它们对语言同样无趣。