Программирование набора ответов. Как подсчитать количество фактов, которые являются результатом моего запроса?

Итак, у меня есть набор фактов и запрос, написанный на ASP для запуска на DLV,

%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 троек в моем наборе ответов не включают факты. затем я сделал такой совокупный запрос #count:

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

но то, что я получил, было только числом переменных TermA, появившихся в качестве моего результата. И когда я изменил свой запрос следующим образом:

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

это дает мне ошибку. Как мне сделать этот запрос?


person Ari Wijayanti    schedule 29.11.2014    source источник


Ответы (1)


Основываясь на знании других решателей, я предполагаю, что ваш код не учитывает комбинации TermA и TermC, он игнорирует варианты TermC. Вы должны сказать ему, что он считает комбинации.

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

Но я не использую dlv, и он у меня не установлен, так что этот ответ может быть неправильным. Пожалуйста, проверьте это сами.

person vukk    schedule 02.12.2014