在lisp prolog查询中将字符串转换为资源或UPI

时间:2015-03-12 14:08:48

标签: prolog lisp rules allegro allegrograph

我正在尝试运行在lisp中实现的prolog规则。在lisp代码中,我遇到了以下问题:

  1. 我从AG知识库查询人员,输出是字符串格式,如

    http://www.myweb.com/myns/Person1” “http://www.myweb.com/myns/Person2

  2. 我将上述字符串转换为资源,如下所示

  3. (setq p1(资源“http://www.myweb.com/myns/Person1”))

    (setq p2(资源“http://www.myweb.com/myns/Person2”))

    将字符串转换为资源后,输出如下:

    !ns:Person1
    !ns:Person2
    
    1. 我拿上面两个人(资源)并通过查询运行规则来查找它们之间的关系。请注意,p1和p2是已知的,?关系是未知变量。查询转到AG knowlegebase并找到关系

      (select-distinct

      (p1?关系p2)

      (MyRulesfunction p1?relation p2)

    2. 问题是当查询在步骤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)
          )
      

1 个答案:

答案 0 :(得分:0)

这应该做到:

(select-distinct ?relation (MyRulesFunction (?? p1) ?relation (?? p2)))

“?” here文档中介绍了语法标记。 我知道我的回答对于OP来说可能晚了5年,但希望有人能受益。