Что такое ?элемент и как проверить это? - PullRequest
2 голосов
/ 02 января 2012

Обратный вызов на выходе следующего

(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 Ответ

3 голосов
/ 02 января 2012

Вы можете запретить Clojure вычислять любое выражение, просто поместив кавычку ' перед этим выражением.Так что '(?) цитирует список с ? в качестве первого элемента без Clojure, пытающегося вызвать функцию ?, а (first '(?)) обращается к ? в этом списке.

Чтобы получить *Прямой символ 1009 *, просто выполните '?, что позволит вам получить доступ к самому символу без Clojure, пытаясь вернуть значение (если есть), присвоенное ?

user=> (= '? (first '(?)))
true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...