cascalog first-n-无法连接 predicate

j8ag8udp  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(330)

我正在cascalog项目的克隆中的leinrepl中完成以下示例。我跑过:

(def src [[1] [3] [2]])

(def queryx (<- [?x ?y] (src ?x) (inc ?x :> ?y)))

(?<- (stdout) [?x ?y] 
(queryx ?x ?y))
-- works

(?- (stdout) queryx) ;; produces (([1 2] [2 3] [3 4]))
-- works

(?- (stdout) (first-n queryx 1 :sort ["?x"] :reverse true))
--works

但是当我尝试这个的时候:

(?<- (stdout) [?x ?y] (first-n queryx 1 :sort ["?x"] :reverse true))

我明白了

IllegalArgumentException Unable to join predicates together  jackknife.core/throw-illegal (core.clj:100)

这似乎是一个查询创建与执行的问题。是否可以创建执行此查询的查询?

sczxawaw

sczxawaw1#

根据文件, first-n 返回一个查询,查询对象也可以作为数据源。
以你自己为例:

(?<- (stdout) [?x ?y] (queryx ?x ?y))

您将?x和?y绑定到查询的输出,因此它可以工作。
在错误代码中,没有对?x和?y的绑定,这就是异常的原因。只要添加绑定就可以了。

(?<- (stdout) [?x ?y] ((first-n queryx 1 :sort ["?x"] :reverse true) ?x ?y))

还记得里面的?x和?y吗 queryx 定义仅用于该查询,并且它们不会自动用于将该queryx用作数据源的任何地方,因此需要如上所示显式绑定它们。

相关问题