2010-07-01 27 views

cevap

9

benzer bir şey yapmaz.

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") 

Bu derleyici uygulama ayrıntılarını güvenmektedir:

Ama burada (kanayan kenarı 1.2 anlık çalıştırmak) bir beygir. Lütfen bunu üretim kodunda kullanmayın.

Gerçekten normal bir makro olmasına ve let* gerçek özel form olmasına rağmen, let özel bir form olarak kabul edilir. fn ve diğerleri ile aynı. Bunlar gelecekte uygulama ayrıntılarına göre değişebilir.

Gerçekten özel formların bir listesini istiyorsanız, listeyi kendiniz yazmanızı öneririm. Liste yeterince kısa (http://clojure.org/special_forms'da listelenen her şey). clojure.core/special-form-anchor için kaynağa bakın, orada kopyalamak/yapıştırmak için kodlanmış bir liste var.

#{'. 'def 'do 'fn 'if 'let 'loop 'monitor-enter 'monitor-exit 'new 'quote 'recur 'set! 'throw 'try 'var} 

(. Yine muhtemelen bir uygulama ayrıntı olsa güvenerek olmamak) Ve ayrıca bu var:

user> (clojure.core/special-symbol? 'if) 
true 
İlgili konular