Аллегрограф Запросы Пролог Пространство
У меня есть несколько троек, которые представляют местоположения нескольких городов. Я хочу иметь возможность запустить запрос Пролога, как
(select (?x ?y ?dist)
(q- ?x !exns:geolocation ?locx)
(q- ?y !exns:geolocation ?locy)
(geo-distance ?locx ?locy ?dist))
но я получаю эту ошибку:
Server returned 400: attempt to call '#:geo-distance/3' which is an undefined function.
Я хотел бы понять, как использовать методы геопространственного мышления, такие как geo-distance
(Я предположил, что он встроен, потому что они используют его здесь. Правда ли, что это не так?) В запросе Пролога, потому что в настоящее время это для меня загадка, и я не нашел хороших примеров для этого.
Я использую Python API, BTW, и в учебнике по Python API они используют getStatements
метод для получения тройки в круге некоторого радиуса. Я хочу иметь возможность делать такие вещи в запросе Prolog, и из Python API, а не из AllegroCL- я хотел бы создавать веб-приложения, и я не знаю, как это сделать в AllegroCL, но я знаю, как в Python.
1 ответ
Невозможно выполнить геопространственные запросы Пролога из Python API. Для этого вы должны использовать Allegro Common Lisp IDE.
РЕДАКТИРОВАТЬ: Не так!
С AllegroGraph 4.6 вы можете сделать это! Проблема заключалась в том, что я использовал AllegroGraph 3.3, поэтому я идиот.
Вот правило Prolog, которое работает из Python API с использованием AllegroGraph 4.6:
(<-- (geo-distance ?point1 ?point2 ?dist)
(lisp ?dist (let (lon1 lat1 lon2 lat2)
(setf (values lon1 lat1) (upi->longitude-latitude ?point1))
(setf (values lon2 lat2) (upi->longitude-latitude ?point2))
(haversine-miles lon1 lat1 lon2 lat2))))
Отдельное спасибо ребятам из Franz Allegro за поддержку!