2012-01-01 35 views
2

調用以下什麼是?元素以及如何測試它?

(def seq-counter (atom 0)) 


(defn tokenize-data [data] 
    (reduce 
     (fn [out-data-map token] 
      (if (seq? token) 
       (conj out-data-map {(keyword (str "DIRECTIVE_" (reset! seq-counter (inc @seq-counter))))token}) 
       (if-not (= token (first '(EQU))) 
        (conj out-data-map {(keyword (str "DATA_1")) token}) 
        (conj out-data-map {:START '(EQU)})))) 
     {} 
     data)) 

的輸出調用

'(EQU (COLOR TABLE) ?) 

扭轉產生

([:START (EQU)] [:DIRECTIVE_13 (COLOR TABLE)] [:DATA_1 ?]) 

我的問題是:什麼是?作爲一個價值,我如何比較它(除了下面的內容)?

我似乎無法測試,看看是否?有沒有使用\ ?.

我所能做的就是比較它,並得到我想要的結果。

(= (last (nth (reverse (tokenize-data '(EQU (COLOR TABLE) ?))) 2)) (first '(?))) 

回答

3

您可以防止Clojure的通過只是把報價'在表達式中的前評估任何表情。所以'(?)引用一個列表?作爲它的第一個元素,沒有Clojure試圖調用?函數,並且(first '(?))訪問該列表中的?

要在?符號直接得到的,根本就'?,這將讓你訪問符號本身沒有的Clojure試圖返回的值(如果有的話)分配給?

user=> (= '? (first '(?))) 
true 
+0

感謝。我忘了'適用於列表元素以及列表本身。 – octopusgrabbus 2012-01-02 14:15:03

相關問題