什么是 ?元素以及如何测试它?

时间:2012-01-01 23:58:37

标签: clojure

在以下

的输出上调用reverse
(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 '(?)))

1 个答案:

答案 0 :(得分:3)

您可以通过在该表达式前放置引用'来阻止Clojure评估任何表达式。因此,'(?)引用一个列表,其中?作为第一个元素,而Clojure没有尝试调用?函数,(first '(?))访问该列表中的?。< / p>

要直接获取?符号,只需执行'?,即可让您在没有Clojure尝试返回分配给{{1}的值(如果有)的情况下访问符号本身}

?