이것은 아마도 매우 어리석은 질문 일 것입니다. (나는 단지 몇 시간 전에 Prolog를 배우기 시작했습니다.)하지만 원자와 관련된 모든 절을 찾는 것이 가능합니까?원자와 관련된 모든 절 찾기
cat(tom).
animal(X) :- cat(X).
, 톰에 대한 모든 가능한 정보를 얻을 수있는 방법이 (또는 적어도 명시 적으로 기본에 명시되어 모든 사실) : 예를 들어, 다음과 같은 지식 기반을 가정? 나는이 같은 쿼리를 할 수없는 것을 이해 : 나는 그런
같은 쿼리를 쓸 수 있도록meta(Object, Predicate) :-
Goal =.. [Predicate, Object],
call(Goal).
:
?- Pred(tom).
그래서 내가 올바른 정보를 추론 할 규칙을 쓸 수 있다고 생각
?- meta(tom, Predicate).
그러나 call
에 대한 인수가 충분히 인스턴스화되지 않았기 때문에 이는 작동하지 않습니다. 그래서 기본적으로 제 질문은 가능합니다. 아니면 이런 종류의 정보를 제공하도록 설계되지 않은 Prolog입니까? 그리고 가능하지 않다면, 왜?
이것은 매우 흥미 롭습니다! 그러나 KB에서 모든 가능한 조건에 대해 매개 변수를 테스트해야한다는 것이 슬프다. 언어에 기능이 포함되어있는 경우보다 효율적으로이를 수행 할 수있는 방법이 있다고 가정합니다. 내가 제안한 솔루션에 대한 또 다른 문제점은 내 프롤로그 엔진 (SWI-Prolog)이 current_predicate/1의 결과 집합에 모든 미리 정의 된 조건부 (예 : atomic/1, functor/3 등)를 포함한다는 것입니다. 문맥 오류; 내가 그걸 막을 수있는 방법에 대한 충고가 있니? 그럼에도 불구하고 통찰력있는 대답에 대해 감사드립니다. –
이전 글에 관해서, 필자는 앞서 설명한 문제점을 해결하는 데 도움이 될 수있는 predicate_property/2를 발견했습니다. –