我有一些三元组代表几个城市的位置。 我希望能够触发Prolog查询,例如
(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
这样的地理空间推理方法(我认为它是内置的,因为他们在这里使用它。 这不是真的吗?在Prolog查询中,因为这目前对我来说是一个谜,我还没有找到任何这样做的好例子。
顺便说一句,在Python API教程中,他们使用getStatements
方法来检索某个半径的圆内的三元组。 我希望能够在Prolog查询中做这种事情,从Python API,而不是从AllegroCL - 我想构建Web应用程序,我不知道如何在AllegroCL中做到这一点,但我确实知道如何在Python中做到这一点。
无法从 Python API 进行地理空间 Prolog 查询。 您必须使用 Allegro Common Lisp IDE 来执行此操作。
编辑:不是这样!
使用 AllegroGraph 4.6,您可以做到这一点! 问题是我使用的是AllegroGraph 3.3,所以我是个白痴。
下面是一个使用 AllegroGraph 4.6 从 Python API 工作的 Prolog 规则:
(<-- (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 的人们对我的帮助!