Я пытаюсь запустить правила пролога, которые реализованы в lisp. В коде 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 известны, а ?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)
)