clojure 的所有特殊形式是什么?

What are all of clojure's special forms?

作为改进 Cider 调试器的一部分,我需要对所有可能的特殊形式实施特殊处理。换句话说,我需要知道所有满足 special-symbol? 的符号。 Special Forms 上的文档页面虽然很有帮助,但并未提供所有内容。

例如,经过一些实验,我了解到

  1. 那里列出的大多数形式都有 * 对应形式(例如 let*loop*)。
  2. 有一个 clojure.core/import* 特殊符号(如果不是运气好我是找不到的)。

是否有所有特殊符号的完整列表?
或者,有没有办法列出所有 interned 符号?如果是这样,那么我可以过滤 special-symbol?.

查看 special-symbol? 的定义提供了一个重要线索:

(defn special-symbol?
  "Returns true if s names a special form"
  {:added "1.0"
   :static true}
  [s]
    (contains? (. clojure.lang.Compiler specials) s))

因此:

user=> (pprint (keys (. clojure.lang.Compiler specials)))
(&
 monitor-exit
 case*
 try
 reify*
 finally
 loop*
 do
 letfn*
 if
 clojure.core/import*
 new
 deftype*
 let*
 fn*
 recur
 set!
 .
 var
 quote
 catch
 throw
 monitor-enter
 def)