C++ dll에서 SWI Prolog 엔진을 호출 중이며 모든 명시/동적 조건부에 액세스 할 수 있기를 원합니다 (일반적으로 나열되는 것과 유사 함).SWI Prolog에서 동적 조건부 통합하기
GNU Prolog에서 나는 변수로 1/1 술어를 호출 할 것이고 Prolog는 모든 동적 술어 표시기로 그것을 통합 할 것이다. 다음 단계에서는이 술어를 변수로 호출하여 완전한 목록을 얻습니다.
SWI 프롤로그에서 불행히도 그럴 수 없습니다 (오류 : 인수가 충분히 인스턴스화되지 않았습니다). 다른 방법이 있습니까?
get_dynamic_predicates(M, H, B, R) :-
current_predicate(_, P),
strip_module(P, M, H),
predicate_property(P, dynamic),
\+ predicate_property(P, built_in),
\+ predicate_property(P, imported_from(_)),
clause(P, B, R).
를이 몸 B
와 절 참조 R
와 모듈 M
에 머리 H
와 술어의 인스턴스를 바인딩 백 트럭 호출 : 단지 예를 들어, 자신의 롤하지 왜
감사합니다. 내 최신 생각이 같은 것을 사용했다 : myIndicators (이름, 인수에 대응) : - predicate_property (동적 헤드), \ + predicate_property (헤드, BUILT_IN), 펑 (헤드, 이름, 인수에 대응을). – aLu
그건 내가 여기서 제안한 것과 아주 비슷합니다. 유일한 차이점은 다른 모듈에서 선언 된 동적 조건자가 발견되었음을 확인하는 것이 었습니다. 여러 개의 모듈을 사용하고 있지 않다면, 당신이 제안한 것은 괜찮아 보입니다! – sharky