Аллегрограф Запросы Пролог Пространство

У меня есть несколько троек, которые представляют местоположения нескольких городов. Я хочу иметь возможность запустить запрос Пролога, как

(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 за поддержку!

Другие вопросы по тегам