`multifile` 结合 semweb `rdf_meta` 用于谓词中的前缀处理
`multifile` in combination with semweb `rdf_meta` for prefix processing in a predicate
SWI-prolog 版本:线程,64 位,版本 7.6.4
OS: Ubuntu 仿生 18.04
仍在努力学习 prolog 和 运行 进入一个有趣的情况。我想在多个文件上使用 'asserted' 的谓词(只是使代码在组织上看起来更清晰),但该谓词还需要能够将 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
栏以确保它适用于多个文件。
我想我明白了。 multifile
和 rdf_meta
一起工作。代码中的错误与我将 rdf_meta 中的 foo
定义为 foo(r)
这一事实有关。我认为扩展在编译时导致模式匹配方面的混乱。将定义更改为 foo(-)
解决了问题。希望这对以后的人有帮助。
SWI-prolog 版本:线程,64 位,版本 7.6.4 OS: Ubuntu 仿生 18.04
仍在努力学习 prolog 和 运行 进入一个有趣的情况。我想在多个文件上使用 'asserted' 的谓词(只是使代码在组织上看起来更清晰),但该谓词还需要能够将 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
栏以确保它适用于多个文件。
我想我明白了。 multifile
和 rdf_meta
一起工作。代码中的错误与我将 rdf_meta 中的 foo
定义为 foo(r)
这一事实有关。我认为扩展在编译时导致模式匹配方面的混乱。将定义更改为 foo(-)
解决了问题。希望这对以后的人有帮助。