我正在使用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
函子,也没有理解它作为谓词运行——如文档中所述。