有没有办法通过编程获得clojure特殊表单的集合?

有没有办法通过编程获得clojure特殊表单的集合?,clojure,special-form,Clojure,Special Form,是否存在类似的情况 (deftest fantasy (is (= ["let" "def" "ns" "etc."] clojure.core/special-chars))) 我觉得没有好办法 但这里有一个黑客(在最前沿的1.2快照上运行): 这取决于编译器的实现细节。请不要在生产代码中使用此选项 请注意,let被认为是一种特殊形式,尽管它实际上是一个普通宏,let*是实际的特殊形式。与fn等相同。这些可能是实施细节,将来可能会有所改变 所以,如果你真的想要一个特殊表单的列表,我建议

是否存在类似的情况

(deftest fantasy
   (is (= ["let" "def" "ns" "etc."] clojure.core/special-chars)))

我觉得没有好办法

但这里有一个黑客(在最前沿的1.2快照上运行):

这取决于编译器的实现细节。请不要在生产代码中使用此选项

请注意,
let
被认为是一种特殊形式,尽管它实际上是一个普通宏,
let*
是实际的特殊形式。与
fn
等相同。这些可能是实施细节,将来可能会有所改变

所以,如果你真的想要一个特殊表单的列表,我建议你自己输入这个列表。这张单子很短(上面列出的所有内容)。查看
clojure.core/special form anchor
的源代码,那里有一个硬编码列表可供复制/粘贴。(不过,也可能是一个不可依赖的实施细节。)

还有这个:

user> (clojure.core/special-symbol? 'if)
true
#{'. 'def 'do 'fn 'if 'let 'loop 'monitor-enter 'monitor-exit 'new 'quote 'recur 'set! 'throw 'try 'var}
user> (clojure.core/special-symbol? 'if)
true