首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cascalog first-n -无法连接谓词

Cascalog first-n -无法连接谓词
EN

Stack Overflow用户
提问于 2013-04-19 10:43:28
回答 1查看 257关注 0票数 1

我正在使用cascalog project的克隆中的lein repl中的following example。我跑过了:

代码语言:javascript
复制
(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

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

代码语言:javascript
复制
(?<- (stdout) [?x ?y] (first-n queryx 1 :sort ["?x"] :reverse true))

我得到了

代码语言:javascript
复制
IllegalArgumentException Unable to join predicates together  jackknife.core/throw-illegal (core.clj:100)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-19 16:09:29

根据文档,first-n返回一个查询,查询对象也用作数据源。

以你自己的例子为例,如果你这样做的话:

代码语言:javascript
复制
(?<- (stdout) [?x ?y] (queryx ?x ?y))

您将?x和?y绑定到查询的输出,因此它可以工作。

在错误代码中,没有绑定?x和?y,这就是出现异常的原因。只需添加绑定,它就会工作。

代码语言:javascript
复制
(?<- (stdout) [?x ?y] ((first-n queryx 1 :sort ["?x"] :reverse true) ?x ?y))

请记住,queryx定义中的?x和?y仅用于该查询,并且它们不会自动用于您使用该查询作为数据源的任何地方,因此您需要显式地绑定它们,如上所示。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16096371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档