Вызов функции листинга в jpl - PullRequest
0 голосов
/ 29 июля 2009

Мне было интересно, удалось ли кому-нибудь использовать «листинг». команда в JPL для проверки содержимого базы знаний Prolog? JPL требует, чтобы вы строили запросы и возвращали решения на основе переменных, которые вы указали в запросе. Например (Java):

Query q = new Query("holdsAt((X,Y) = true, 3)");
while ( q.hasMoreSolutions() ){
    Hashtable s = q.nextSolution();
    System.out.println(s.get("X")+", "+s.get("Y"));
}

Я не вижу, как это будет работать для листинга / 0 или даже для листинга / 1, который требует инстанцированного ввода. Сейчас я играю с кодом вида

predicate_property(L,interpreted), 
\+ predicate_property(L, built_in), 
\+ predicate_property(L,imported_from(_)), 
current_predicate( X, L), current_predicate(X/Z).

, который возвращает функцию, существующую в базе знаний:

myFunction:-
    myGoal1,
    myGoal2.

ответ:

L = myFunction(_G403,_G404),
X = myFunction,
Z = 2 

Но этого недостаточно, поскольку ни одна из целей не возвращается. Я полагаю, что мне нужно (если функция листинга не может быть вызвана с использованием JPL), это функция, которая возвращает в качестве переменной заголовок предиката вместе со списком соответствующих целей, которые должны быть выполнены. К сожалению, я не знаком с внутренностями функции листинга, поэтому не знаю, как это сделать.

Заранее спасибо

1 Ответ

0 голосов
/ 29 июля 2009

У меня есть функция, которая работает в настоящее время, но я обеспокоен тем, что она менее эффективна, чем вызов 'list'

getClauses(Y):-
    predicate_property(L,interpreted), 
    \+ predicate_property(L, built_in), 
    \+ predicate_property(L,imported_from(_)), 
    current_predicate( X, L), 
    current_predicate(X/Z),
    findall((L, T), clause(L, T), Y).

, который возвращает предикат, существующий в базе знаний:

myPredicate:-
    myGoal1,
    myGoal2.

результат:

?- getClauses(Y).
Y = [ (myPredicate, myGoal1, myGoal2)] 

Обратите внимание, что это не будет работать для предикатов, которые были импортированы из других модулей.

...