Я работаю с datomic.api для clojure. Я хочу реорганизовать несколько сложный запрос на регистрацию, например:Определение компонентов запроса данных за пределами (datomic.api/q '[])
(datomic.api/q '[:find [?value ...] :in $ ?uid ?component :where
[...some clause...]
[...some other clause...]
(or-join [?entitlement ?component]
(and [...some conditional stuff...])
(and [...some other conditional stuff...]))]
db uid component)
... во что-то более читаемое. Мое желание - локально связать компоненты запроса (and...)
внутри let
и обратиться к ним по имени внутри списка данных. Как так:
(datomic.api/q '[:find [?value ...] :in $ ?uid ?component :where
[...some clause...]
[...some other clause...]
(or-join [?entitlement ?component]
entitled-for-component
entitled-for-application)]
db uid component)
Различные процитировать let
(и unquoting внутри списка datomic.api/Q в) не работал. Какие-либо предложения?
Да. Сортировка quoting/unquoting sort-of работает, если вы используете цитирование синтаксиса, но тогда вы получите такие вещи, как * и *, которые будут заменены символами с именами, которые будут отличаться от другого. Ниже приведен ваш ответ. –
Мне нравится ответ ниже, чтобы использовать правила. Чтобы quasiquote в Clojure, как вы бы в других lisps, попробуйте форму 'template' в [backtick] (https://github.com/brandonbloom/backtick). –