Версия SWI-пролога: многопоточная, 64-битная, версия 7.6.4 ОС: Ubuntu bionic 18.04
Все еще работаю над изучением пролога и столкнулась с интересной ситуацией.Я хотел бы использовать предикат, который «утверждается» в нескольких файлах (просто код выглядит немного чище в организации), но этот предикат также должен иметь возможность обрабатывать префиксы rdf как часть пакета semweb, и он непохоже, работает.
Вот блок кода, который может показать проблему:
:- module(multifile1,
[
test/2
]
).
:- use_module(library(semweb/rdf_db)).
:- use_module(library(semweb/rdfs)).
:- multifile
multifile1:bar/1,
multifile1:foo/1.
:- rdf_meta
test(-, r),
foo(r).
test(bar, X) :-
bar(X).
test(foo, X) :-
foo(X).
multifile1:bar(abc) :-
format('bar: abc~n', []).
foo(rdf:about) :-
format('foo: rdf:about~n', []).
И утверждение того же foo
в другом файле:
:- module(multifile2,
[
]
).
:- use_module(library(semweb/rdf_db)).
:- use_module(library(semweb/rdfs)).
:- multifile
multifile1:foo/1.
:- rdf_meta
multifile1:foo(r).
multifile1:foo(rdf:type) :-
format('rdf:type~n', []).
В этой форме вызов test(foo, rdf:about
) работает, но утверждение test(foo, rdf:type)
не работает.Разве rdf_meta и multifile не должны работать вместе или в этом коде есть ошибка?
PS: я добавил полосу multifile
, чтобы убедиться, что она работает с несколькими файлами.