これに似たものはありますか?:
(deftest fantasy
(is (= ["let" "def" "ns" "etc."] clojure.core/special-chars)))
これに似たものはありますか?:
(deftest fantasy
(is (= ["let" "def" "ns" "etc."] clojure.core/special-chars)))
私はそれをする良い方法はないと思います。
しかし、ここにハックがあります(最先端の1.2スナップショットで実行します):
user> (map (comp name first) (seq clojure.lang.Compiler/specials))
("deftype*" "new" "quote" "&" "var" "set!"
"monitor-enter" "recur" "." "case*" "import*"
"reify*" "do" "fn*" "throw" "monitor-exit" "letfn*"
"finally" "let*" "loop*" "try" "catch" "if" "def")
これは、コンパイラの実装の詳細に依存しています。これを本番コードで使用しないでください。
letこれは実際には通常のマクロでlet*あり、実際の特殊な形式ですが、特殊な形式と見なされることに注意してください。他の人と同じfnです。これらはおそらく実装の詳細であり、将来変更される可能性があります。
したがって、特別なフォームのリストが本当に必要な場合は、リストを自分で入力することをお勧めします。リストは十分に短いです(すべてがhttp://clojure.org/special_formsにリストされています)。のソースを見てくださいclojure.core/special-form-anchor。コピー/貼り付けするためのハードコードされたリストがあります。(ここでも、おそらく信頼できない実装の詳細です。)
#{'. 'def 'do 'fn 'if 'let 'loop 'monitor-enter 'monitor-exit 'new 'quote 'recur 'set! 'throw 'try 'var}
そしてこれもあります:
user> (clojure.core/special-symbol? 'if)
true