首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“`multifile`”与`rdf_meta`结合,用于谓词中的前缀处理

“`multifile`”与`rdf_meta`结合,用于谓词中的前缀处理
EN

Stack Overflow用户
提问于 2018-12-18 04:37:57
回答 1查看 44关注 0票数 1

SWI-prolog版本:线程,64位,版本7.6.4 OS: Ubuntu仿生18.04

仍然在学习prolog,并遇到了一个有趣的情况。我想使用一个在多个文件上“断言”的谓词(只是使代码在组织上看起来更清晰),但该谓词还需要能够将rdf前缀作为semweb包的一部分处理,而且它似乎不起作用。

下面是一个可能显示问题的代码块:

代码语言:javascript
复制
:- 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

代码语言:javascript
复制
:- 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和多文件不应该一起工作,还是在这段代码中有一个bug?

PS:我添加了multifile栏,以确保它可以工作在多个文件上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-18 22:10:42

我想我想明白了。multifilerdf_meta确实一起工作。代码中的错误与我在rdf_meta中将rdf_meta定义为foo(r)这一事实有关。我认为这种扩展在编译时引起了模式匹配方面的混乱。将定义更改为foo(-)解决了问题。希望这对将来的人有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53826470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档