2012-01-11 5 views
3

problems at 4Clojure을 통해 작업하고 있습니다.Clojure :`및 ~ @의 의미는 무엇입니까?

i를 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 

~ @ 일부 인용 데이터/코드 내 요소의 목록을 확장 할 수있게됩니다 맺다 - 스 플라이 싱 운영자가있다.

예 : 이들 및 관련 동작 모두

(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의 일부로서 찾아 볼 수있다. 이 커먼 리스프, 그리고 Clojure의, 실용 커먼 리스프의 매크로에 대한 장 비록

+0

그것은 '것을 ~ 날 것으로 보인다를 @'아니라 유용한 syntax-quote'd seq. 내가 맞습니까? – Wieczo

+0

예 - 저는 ~ @가 인용 된 문맥에서만 정의됩니다. 두 사람은 서로 잘 어울립니다. 같은 ~에 간다. – mikera

+0

대단히 고마워요! – Wieczo