我正在使用 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)))
您已经看到了这段代码,因为您评论了here https://stackoverflow.com/questions/8924654/define-rules-for-allegrograph-triples-and-how-to-apply-them。但你一定没有注意到lispp
函子,或者理解为它作为谓词运行 - 如中所述文档 https://franz.com/support/documentation/current/doc/prolog.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)