Как получить все пункты, определенные / загруженные из файла в Прологе

Я использую SWI Prolog и удивлен, что не нашел очевидного способа сделать это в Prolog. То, что мне нужно, это что-то похожее на предложение /2, но допускает необоснованный первый аргумент (и относится только к предложениям в данном файле, т. Е. Мне не нужна вся библиотека Prolog!). Вот что я написал, чтобы найти все пункты

clauseX(H,B) :-
    current_predicate(P/Arity),
    functor(H,P,Arity),
    absolute_file_name('filname.pl', AbsFileName),
    predicate_property(H, file(AbsFileName)),
    clause(H,B).

Есть ли более краткий способ сделать это?

1 ответ

Итак, я смог несколько сократить его, первые два литерала не требуются, это вернет пункты в файле filename.pl

clauseX(H,B) :-
    absolute_file_name('filname.pl', AbsFileName),
    predicate_property(H, file(AbsFileName)),
    clause(H,B).

Однако я все еще обеспокоен эффективностью этого и должен ли он обращаться к файлу каждый раз, когда вызывается clauseX

Другие вопросы по тегам