2014-11-29 4 views
1

그래서 나는 답변 프로그래밍 설정 - 사실 수를 계산하는 방법이 내 쿼리 결과로 보입니까?

%Q1 : Find the implicit "is_a" relationship between terms 
%ex: if term A is is_a term B, term B is_a term C, then term A is_a term C 
%is_a One level 
    triple1(TermA, "go:is_a", TermB):- triple(TermA, "go:is_a", TermB), TermA != TermB. 
%is_a MultiLevel 
triple1(TermA, "go:is_a", TermC) :- 
    triple(TermA, "go:is_a", TermB), 
    triple(TermB, "go:is_a", TermC), 
    TermA != TermC. 
triple1(TermA, "go:is_a", TermC) :- 
    triple1(TermA, "go:is_a", TermB), 
    triple1(TermB, "go:is_a", TermC), 
    TermA != TermC. 

다음 나는 사실을 포함하지 설정 내 대답에 얼마나 triple1 트리플 많은 계산하려면, DLV에서 실행되는 사실의 집합 및 ASP로 작성된 쿼리가 있습니다. 나는 집계 COUNT 개 쿼리의 이런 종류의 만든 :

triple1nr(X) :- #count{TermA : triple1(TermA,"go:is_a",TermC)} = X. 

을하지만 내가 얻은 것은 변수 TermA의 수는 내 결과로 표시했다. 그리고 내 검색어를 다음과 같이 변경했을 때

triple1nr(X) :- #count{triple1(TermA,"go:is_a",TermC)} = X. 

내게 오류가 발생합니다. 이 쿼리는 어떻게해야합니까?

답변

2

다른 해결사에 대한 지식을 바탕으로, 귀하의 코드가 TermA와 TermC의 조합을 포함하지 않는다고 생각합니다. TermC 변형을 무시하고 있습니다. 당신은 그것이 조합을 셀 것이라고 말해야합니다.

triple1nr(X) :- #count{TermA,TermC : triple1(TermA,"go:is_a",TermC)} = X. 

는하지만 DLV를 사용하지 않고, 나는 그것이 설치되어 있지 않기 때문에이 답변이 잘못 될 수 있습니다. 직접 시험해보십시오.

+0

테스트를 통해 완벽하게 작동합니다. 고맙습니다! –