我正在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)
这似乎是一个查询创建与执行的问题。是否可以创建执行此查询的查询?
1条答案
按热度按时间sczxawaw1#
根据文件,
first-n
返回一个查询,查询对象也可以作为数据源。以你自己为例:
您将?x和?y绑定到查询的输出,因此它可以工作。
在错误代码中,没有对?x和?y的绑定,这就是异常的原因。只要添加绑定就可以了。
还记得里面的?x和?y吗
queryx
定义仅用于该查询,并且它们不会自动用于将该queryx用作数据源的任何地方,因此需要如上所示显式绑定它们。