SWI-prolog semweb库处理URI
SWI-prolog semweb library processing of URI
作为 prolog 的新手,我正在阅读现有代码(以及尝试编写一些代码)。在 semweb 中有一些先前的背景,我开始使用它并看到一些让我感到困惑的东西。断言示例:
?- rdf_assert(ex:bob, rdf:type, foaf:'Person').
我还在文档中找到了以下内容:
Remember: Internally, all resources are atoms. The transformations
above are realised at compile-time using rules for goal_expansion/2
provided by the rdf_db library
我假设图书馆以某种方式将三个 URI 视为原子,我是否正确?我以为编译器会将其视为 module_name:predicate
,但事实并非如此。如果这是真的,能否请您提供一个简单的示例,说明如何在序言中完成此操作?
谢谢
Prolog 不是函数式语言。这意味着 2+3
不会 将 评估为 5
并且只是一个从处理它的谓词中获得 含义 的术语.同样,ex:bob
只是一个与模块或模块没有直接关系的术语
谓词。只有 call/1 这样的谓词才会将其解释为 "call bob
in the module ex
".
除此之外,(SWI-)Prolog(大多数 Prolog,但不是全部)有 术语扩展 允许您重写在传递给之前读取的术语编译器。用于重写 rdf/3
的参数:prefix:local
的每次出现都扩展为一个完整的原子。您可以通过在使用前缀符号调用 rdf/3 的谓词上使用 listing/1
来检查。
另见 rdf_meta
作为 prolog 的新手,我正在阅读现有代码(以及尝试编写一些代码)。在 semweb 中有一些先前的背景,我开始使用它并看到一些让我感到困惑的东西。断言示例:
?- rdf_assert(ex:bob, rdf:type, foaf:'Person').
我还在文档中找到了以下内容:
Remember: Internally, all resources are atoms. The transformations
above are realised at compile-time using rules for goal_expansion/2
provided by the rdf_db library
我假设图书馆以某种方式将三个 URI 视为原子,我是否正确?我以为编译器会将其视为 module_name:predicate
,但事实并非如此。如果这是真的,能否请您提供一个简单的示例,说明如何在序言中完成此操作?
谢谢
Prolog 不是函数式语言。这意味着 2+3
不会 将 评估为 5
并且只是一个从处理它的谓词中获得 含义 的术语.同样,ex:bob
只是一个与模块或模块没有直接关系的术语
谓词。只有 call/1 这样的谓词才会将其解释为 "call bob
in the module ex
".
除此之外,(SWI-)Prolog(大多数 Prolog,但不是全部)有 术语扩展 允许您重写在传递给之前读取的术语编译器。用于重写 rdf/3
的参数:prefix:local
的每次出现都扩展为一个完整的原子。您可以通过在使用前缀符号调用 rdf/3 的谓词上使用 listing/1
来检查。
另见 rdf_meta