2

我正在使用 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)))

但是无论如何都会添加三元组,无论它是否已经存在。为什么?

4

1 回答 1

0

您的第二次尝试更正确,但您应该使用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函子,或者理解它作为谓词运行 - 如文档中所述。

于 2021-11-06T14:17:12.490 回答