AllegroGraph检查现有的三元组



我正在使用AllegroGraph 4。我有一个三元组存储,只有当它们还不存在时,我才会尝试添加新的三元组。

这是我的Prolog查询:

(select (?news) (alfas ?news) (a-- ?news !tst:has-annotation !tst:Test)))

其中alfas检查条件(工作正常),a--定义如下:

(<-- (a-- ?s ?p ?o)
;; Fails unless all parts ground.
(lisp (not (triple-exists-p ?s ?p ?o)))
(lisp (add-triple ?s ?p ?o)))

我也试着这样定义它:

(<-- (a-- ?s ?p ?o)
;; Fails unless all parts ground.
(lisp (not (get-triple :s ?s :p ?p :o ?o)))
(lisp (add-triple ?s ?p ?o)))

但是,不管三元组是否已经存在,它都是添加的。为什么?

您的第二次尝试更正确,但您应该使用lispp而不是lisp来检查三元组是否已经存在:

(<-- (a-- ?s ?p ?o)
;; Fails unless all parts ground.
(lispp (not (get-triple :s ?s :p ?p :o ?o)))
(lisp (add-triple ?s ?p ?o)))

您已经看到了此代码,因为您在此处发表了评论。但您一定没有注意到lispp函子,也没有理解它作为谓词运行——如文档中所述。

相关内容

  • 没有找到相关文章

最新更新