2012-01-11 41 views
3

私はproblems at 4Clojureで作業しています。Clojure: `と〜@の意味は何ですか?

私はTic-Tac-Toe exerciseのための実用的なソリューションを持っているが、私はDarren'sソリューションを理解することはできません。

(fn [b] 
    (some (fn [p] (first (keep #(if (apply = p %) p) 
         `([email protected]     ; <- What is that ` and [email protected]? 
          [email protected](apply map list b) ; 
          ~(map get b [0 1 2]) 
          ~(map get b [2 1 0]))))) 
    [:x :o])) 
;b is a two-dimensional vector 

`と〜の意味は何であるの@?

答えて

10

`は、コードを評価せずにデータとして書き込むために使用される構文引用符です。関数を表すシンボルを正しい名前空間に解決するには十分に巧妙であることに注意してください。

例:

`(+ 1 2) 
=> (clojure.core/+ 1 2) ; a list containing the + function and two arguments 

(eval `(+ 1 2)) 
=> 3      ; the result of evaluating the list 

〜@いくつか引用されたデータ/コード内の要素のリストを展開することができるようになりますにunquoteスプライシングオペレータ、です。

例:これらと関連する操作の両方に

(def args [3 4 5 6]) 

`(+ 1 2 [email protected] 7 8) 
=> (clojure.core/+ 1 2 3 4 5 6 7 8) 

`(+ [email protected](range 10)) 
=> (clojure.core/+ 0 1 2 3 4 5 6 7 8 9) 

さらなる詳細は、documentation for the Clojure readerの一部として求めることができます。

+0

を '〜@'だけであるように私には思えます有用な内部構文 - 引用seq。私は正しい? – Wieczo

+0

はい - 〜@は引用されたコンテキスト内でのみ定義されていると思います。 2人はかなり手を携えて仕事をしています。同じ〜に行く。 – mikera

+0

ありがとうございます! – Wieczo

関連する問題