我正在尝试运行在 lisp 中实现的序言规则。在 lisp 代码中,我遇到以下问题:
我从 AG 知识库查询人员,输出为字符串格式,例如
" http://www.myweb.com/myns/Person1 " " http://www.myweb.com/myns/Person2 "
我将上面的字符串转换为 Resource 如下
(setq p1(资源“ http://www.myweb.com/myns/Person1 ”))
(setq p2(资源“ http://www.myweb.com/myns/Person2 ”))
将字符串转换为资源后,输出如下:
!ns:Person1
!ns:Person2
我以上述两个人(资源)并通过查询运行规则以查找他们之间的关系。请注意 p1 和 p2 是已知的,而 ?relation 是未知变量。查询到 AG 知识库并找到关系
(选择不同
(p1 关系 p2)
(MyRulesfunction p1 ?relation p2)
)
问题是当查询在第 2 步中使用 select-distinct 运行时。它不会将资源作为参数并抱怨 UPI 转换。我也尝试过使用(value->upi)
函数转换为 UPI,但没有成功。
谁能帮帮我?我可以在 MyRulesfunction 中传递什么格式的 p1 和 p2 值来查找关系。您的帮助将不胜感激。我的规则功能定义如下:;; 如果两个人都住在同一个城市,则适用于人的规则
(<--(MyrulesFunction ?p1 !ns:SameCityWith ?p2)
(q ?p1 !ns:hasCity ?city)
(q ?p2 !ns:hasCity ?city)
)