Clojure 在查询中使用Datomic pull

Clojure 在查询中使用Datomic pull,clojure,datomic,Clojure,Datomic,根据Datomic附带的“geting started.clj”文件的第54行(在samples/seattle下),我应该能够在查询中使用pull函数,如下所示: (def pull-results (q '[:find (pull ?c [*]) :where [?c :community/name]] (db conn))) 但是,在下面的代码中,我得到了一个错误:find中的IllegalArgumentException参数[*]不是变量datomic.query/validate-

根据Datomic附带的“geting started.clj”文件的第54行(在samples/seattle下),我应该能够在查询中使用pull函数,如下所示:

(def pull-results (q '[:find (pull ?c [*]) :where [?c :community/name]] (db conn)))
但是,在下面的代码中,我得到了一个错误:find中的IllegalArgumentException参数[*]不是变量datomic.query/validate-query(query.clj:315)

现在,在我看来,这两个结构是相似的。再加上读取的pull函数api似乎是:

(pull db pattern eid)

我想说,自从西雅图代码编写以来,API已经发生了变化。我说得对吗?如果没有,这里发生了什么。谢谢

正如评论员指出的,问题是传递
datomic.api/pull
函数,而不是使用pull表达式。有几点需要澄清:


您不是在查询中调用
pull
函数,而是在
find
子句中使用一个名为
pull
的特殊表达式。请注意,查询接受一个数据结构文本(为什么必须使用
quote
/
'
)。
pull
表达式是的一部分,数据日志解析器可以识别,而不是直接调用具有不同调用的Datomic API中的pull函数。

我猜从
d/pull
中删除
d/
。这是本例的语法。谢谢!这就解决了问题。
(pull db pattern eid)