我正在尝试运行在lisp中实现的prolog规则。在lisp代码中,我遇到了以下问题:
我从AG知识库查询人员,输出是字符串格式,如
“http://www.myweb.com/myns/Person1” “http://www.myweb.com/myns/Person2”
我将上述字符串转换为资源,如下所示
(setq p1(资源“http://www.myweb.com/myns/Person1”))
(setq p2(资源“http://www.myweb.com/myns/Person2”))
将字符串转换为资源后,输出如下:
!ns:Person1
!ns:Person2
我拿上面两个人(资源)并通过查询运行规则来查找它们之间的关系。请注意,p1和p2是已知的,?关系是未知变量。查询转到AG knowlegebase并找到关系
(select-distinct
(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)
)
答案 0 :(得分:0)
这应该做到:
(select-distinct ?relation (MyRulesFunction (?? p1) ?relation (?? p2)))
“?” here文档中介绍了语法标记。 我知道我的回答对于OP来说可能晚了5年,但希望有人能受益。