2012-05-14 4 views
3

여러 도시의 위치를 ​​나타내는 트리플이 있습니다. 나는Allegrograph 지형 공간 프롤로그 쿼리

(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 같은 지리 공간 추론 방법을 사용하는 방법을 이해하고 싶습니다

나는 그들이 here을 사용하기 때문에 내장되어 있다고 가정했다. 이것은 Prolog 쿼리에서 현재 사실이 아니기 때문에 그렇습니까?) 이것은 현재 나에게 미스테리이기 때문에 이것을 수행하기위한 좋은 예제를 발견하지 못했습니다.

저는 파이썬 API 인 BTW를 사용하고 있습니다. Python API tutorial에서 그들은 getStatements 메서드를 사용하여 일부 반경의 원 안에 트리플을 검색합니다. AllegroCL이 아닌 Prolog 쿼리와 Python API에서 이런 종류의 작업을 수행 할 수 있기를 원합니다. 웹 앱을 제작하고 싶지만 AllegroCL에서 어떻게 할 지 모르겠지만 파이썬에서 어떻게 알아.

+0

geo-distance는 내장 함수가 아니지만 AllegroCL에서는 다음과 같이 정의 할 수 있습니다.'(<- (geo-distance? point1? point2? dist) (lisp? dist (LAT1 lon1 lon2 LAT2) \t \t (setf의 (값 lon1 LAT1) (upi-> 경도 위도? POINT1)) \t \t (setf의 (값 lon2 LAT2) (upi-> 경도 위도? POINT2)) \t \t (haversine-miles lon1 lat1 lon2 lat2))))) 그러나이 정의는 (lisp) 이스케이프를 허용하지 않기 때문에 Python API의 addRules를 사용하면 작동하지 않습니다. –

답변

1

Python API에서 지형 공간 Prolog 쿼리를 만들 수 없습니다. 이를 위해서는 Allegro Common Lisp IDE를 사용해야합니다.

편집 : 아닙니다!

AllegroGraph 4.6을 사용하면 이렇게 할 수 있습니다! 문제는 AllegroGraph 3.3을 사용했기 때문에 나는 바보입니다. 저를 도와 주셔서 프란츠 알레그로 지원에서의 사람들에

(<-- (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)))) 

특별 감사 :

여기 인 AllegroGraph 4.6을 사용하여 파이썬 API에서 작동하는 프롤로그 룰이다!