преобразование строки в ресурс или UPI в запросе пролога lisp

Я пытаюсь запустить правила пролога, которые реализованы в lisp. В коде lisp у меня возникают следующие проблемы:

  1. Я запрашиваю людей из базы знаний AG, вывод в строковом формате, например

    "http://www.myweb.com/myns/Person1" "http://www.myweb.com/myns/Person2"

  2. Я конвертирую указанную выше строку в ресурс следующим образом

(setq p1 (ресурс "http://www.myweb.com/myns/Person1") )

(setq p2 (ресурс "http://www.myweb.com/myns/Person2") )

После преобразования строки в ресурс вывод выглядит следующим образом:

!ns:Person1
!ns:Person2
  1. Я беру двух вышеупомянутых лиц (ресурс) и запускаю правило через запрос, чтобы найти связь между ними. обратите внимание, что p1 и p2 известны, а ?relation — неизвестные переменные. Запрос отправляется в базу знаний AG и находит отношение

    (выбрать-отличный

    (p1 ?отношение p2)

    (функция MyRules p1 ?отношение p2)

    )

Проблема в том, что когда запрос выполняется на шаге 2 с помощью select-distinct. он не принимает ресурс в качестве аргументов и не жалуется на преобразование UPI. Я также пытался с помощью функции (value->upi) преобразовать в UPI, но безуспешно.

Кто-нибудь может мне помочь? Какой формат значений p1 и p2 я могу передать в функцию MyRules, чтобы найти отношение. Ваша помощь будет высоко оценена. У меня есть функция правила, определенная следующим образом: ;; правило для лиц, если оба лица проживают в одном городе

  (<--(MyrulesFunction ?p1 !ns:SameCityWith ?p2) 

  (q ?p1 !ns:hasCity ?city)
    (q ?p2 !ns:hasCity ?city)
    )

person user3356568    schedule 12.03.2015    source источник
comment
правила пролога, реализованные в comman lisp. Common Lisp не включает пролог. Чтобы было ясно, вы используете AllegroGraph?   -  person Joshua Taylor    schedule 12.03.2015
comment
Да, я использую AllegroGraph   -  person user3356568    schedule 12.03.2015


Ответы (1)


Это должно сделать это:

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

'??' синтаксический маркер описан в документации здесь . Я знаю, что мой ответ, вероятно, опоздал на 5 лет для ОП, но надеюсь, что кому-то это будет полезно.

person osearbhain    schedule 03.07.2020