跨多个模块定义谓词的各个部分

2023-12-27

我正在尝试写一个谓词move/3它处理多种术语,每种术语都在单独的文件中定义。我正在尝试为此使用模块,因为这些文件包含其他应适当命名空间的谓词。

所以,我创建了一个模块cat.prolog内容:

:- module(cat, [move/3]).
:- multifile(move/3).

move(cat(C), P, cat(C2)) :-
   ...

同样对于dog.prolog.

And main.prolog with:

:- use_module(['cat.prolog'], [move/3]).
:- use_module(['dog.prolog'], [move/3]).

(various predicates that use move/3 and expecting the clauses from all imported modules to be applicable.)

尝试在 SWI-Prolog 中运行它:

?- ['main.prolog'].
%  cat.prolog compiled into cat 0.00 sec, 4,800 bytes
ERROR: Cannot import dog:move/3 into module user: already imported from cat
Warning: /home/edmund/main.prolog:2:
        Goal (directive) failed: user:use_module([dog.prolog],[move/3])
% main.prolog compiled 0.00 sec, 10,176 bytes
true.

此时我可以使用dog:move/3 and cat:move/3但不是move/3。它适用于cat情况但不是dog case.

我感觉有一种非常明显的方法可以做到这一点。我已经尝试以多种方式组合模块、导入和多文件指令,但仍然没有找到它......


multifile/1 语法很简单,但是文档 http://www.swi-prolog.org/pldoc/doc_for?object=%28multifile%29/1缺少一个简单的例子...

我创建了 3 个modules files: pets.pl, cat.pl, dog.pl.

:- module(pets, [test/0, move/3]).
:- multifile move/3.
move(A,B,C) :- writeln(pets-move(A,B,C)).
test :- forall(move(A,B,C), writeln(move(A,B,C))).

:- module(cat, []).
:- use_module(pets).
pets:move(A,B,C) :- writeln(cat-move(A,B,C)).

:- module(dog, []).
:- use_module(pets).
pets:move(A,B,C) :- writeln(dog-move(A,B,C)).

注意相关语法Module:Pred :- ...在“依赖”文件中

?- [cat,dog].
%  pets compiled into pets 0.00 sec, 3 clauses
% cat compiled into cat 0.01 sec, 7 clauses
% dog compiled into dog 0.00 sec, 3 clauses
true.

?- test.
Correct to: "pets:test"? yes
pets-move(_G41,_G42,_G43)
move(_G41,_G42,_G43)
cat-move(_G41,_G42,_G43)
move(_G41,_G42,_G43)
dog-move(_G41,_G42,_G43)
move(_G41,_G42,_G43)
true.

?- 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跨多个模块定义谓词的各个部分 的相关文章

  • 查找多模块 Maven Reactor 项目的根目录

    有没有一种简单的方法可以找到多模块 Maven 项目的根 例如 Gradle 的rootDir 背景 我想使用 maven dependency plugin 将多模块项目的所有子模块中的工件复制到相对于整个项目的根目录的目录 也就是说 我
  • Node.js:如何从模块内获取需要函数的文件名?

    我试图从需要模块功能的地方获取原始文件名 我知道你可以使用 filename获取当前文件 但我想获取原始文件 例如 我有一个简单的模块 模块 js module exports function return print function
  • Prolog 中的迷你数独求解器中途停止

    我正在学习 七周七种语言 我只是想从书中找到一个例子 它解决迷你数独网格 4x4 作者使用的是 gprolog 但我使用的是 swi prolog 无论出于何种原因 我都无法让 gprolog 在我的虚拟机上工作 但 swi prolog
  • 非成员规则在 Prolog 中无法按预期工作

    我正在尝试在 Prolog 中创建一个迷宫程序 其目的是找到一条从迷宫起点到迷宫中心点 m 的路线 迷宫由使用四种颜色之一连接的正方形组成 蓝色 绿色 紫色或橙色 从起点到中心的路线遵循四种颜色的重复图案 我创建了以下代码 link2 A
  • Prolog 匹配 vs miniKanren 统一

    在 Prolog 人工智能编程中 Bratko 在第 58 页说了以下内容 Prolog 中的匹配对应于逻辑中所谓的统一 但是 我们避免使用 统一 这个词 因为出于效率原因 在大多数 Prolog 系统中 匹配的实现方式并不完全对应于统一
  • 在 Prolog、尾递归中计算斐波那契数列

    我想在 Prolog 中以递归尾部模式计算斐波那契数列 fibonacci 0 0 fibonacci 1 1 fibonacci N Result fibonacci N 1 0 fibonacci N Result Count Coun
  • 在列表列表中查找形状

    节目说明 该计划的目的 我的程序旨在计算 20X15 大小的平面中形状的位置 我有一个形状列表 其中包含形状类型 其 ID 半径或高度以及其在平面上的预期 X Y 位置 我有一个不同的二元运算列表 仅包含形状类型 其 id 及其与另一个形状
  • 列表中的连续元素

    我正在阻止一个谓词来编码Prolog 我需要对两个谓词进行编码 如果我打电话 u a b c d e f X 它会给X a b X b c X c d 如果我打电话 v a b c d e f X 它会给X a b X c d X e f
  • 控制 Prolog 变量值选择

    灵感来自之前的一个问题 https stackoverflow com questions 41595786 using operator to save variables in a list我尝试实现一些可以枚举布尔表达式可能性的东西
  • 如何在模块中使用“before_action”

    我想在模块中使用 before action 不幸的是 我无法让它发挥作用 我正在谷歌搜索 但我发现的一切都无法解决问题 我的模块文件如下所示 module ShowController include SimpleController b
  • 导入 csv 文件数据以填充 Prolog 知识库

    我有一个 csv 文件example csv其中包含两列 标题为 var1 和 var2 我想填充一个最初为空的 Prolog 知识库文件import pl具有重复的事实 而每一行example csv处理方式相同 fact A1 A2 f
  • 指定 gfortran 应该在其中查找模块的目录

    我目前基于模块来编译程序 例如主程序foo这取决于模块bar 如下 gfortran c bar f90 gfortran o foo exe foo f90 bar o 当foo f90 and bar f90位于同一目录中 如何指定 g
  • 导入目录下的所有模块

    有没有办法导入当前目录中的所有模块 并返回它们的列表 例如 对于包含以下内容的目录 mod py mod2 py mod3 py 它会给你
  • 为现有模块创建 d.ts 文件

    我正在尝试创建一个d ts文件为React 静态容器 https github com reactjs react static container图书馆 NPM 中安装的库如下所示 var React require react var
  • Prolog:子句在源文件中不在一起

    我有这段代码 Family tree female pen male tom male bob female liz female pat female ann male jim parent pam bob parent tom bob
  • Perl:测试输入阅读器?

    有没有一种方法可以使用标准 Test 等模块自动测试 Perl 程序是否正在读取输入 例如标准输入正确吗 例如 测试一个从 STDIN 读取两个整数并打印它们之和的程序 这不是 100 清楚你的意思 我会回答假设你想编写一个测试脚本来测试你
  • webpack中动态加载外部模块失败

    我正在尝试建立以下架构 一个核心 React 应用程序 它具有一些基本功能 并且能够在运行时加载其他 React 组件 这些额外的 React 组件可以按需加载 并且它们在构建核心应用程序时不可用 因此它们不能包含在核心应用程序的捆绑包中
  • Same_length/2 更好的纯版本

    鉴于频繁的纯定义same length 2 as same length same length As Bs same length As Bs same length L L loops 是否有一个纯粹的定义不会在这种情况下循环 类似于纯
  • 谓词对于列表中的所有元素都必须为 true

    我有一组事实 likes john mary likes mary robert likes robert kate likes alan george likes alan mary likes george mary likes har
  • VBA 架构技巧 - 宏封装

    我拼凑了 Excel 的概念证明 以从数据库获取数据 并需要将其打包 以便可以将其分发给我们的客户 我的第一次尝试只是将所有代码放入代码模块中 但随后在 Excel 中我可以看到宏列表中的所有模块 而我实际上只想要列表中的主要模块 我猜想我

随机推荐

  • SQL 连接如何工作?

    我试图了解连接内部是如何工作的 以下两个查询的运行方式有何不同 For example A Select FROM TABLE1 FULL JOIN TABLE2 ON TABLE1 ID TABLE2 ID FULL JOIN TABLE
  • 为什么 Python 不优化掉临时变量?

    福勒的提取变量 http refactoring com catalog extractVariable html重构方法 以前引入解释变量 http c2 com cgi wiki IntroduceExplainingVariable
  • 如何使用 RESTful Web 服务创建异步通知系统?

    我有一个通过 RESTful Web 服务提供的 Java 应用程序 我想创建一种机制 以便客户端可以注册事件通知 问题是无法保证客户端程序将是 Java 程序 因此我无法为此使用 JMS 即 如果每个客户端都是 Java 应用程序 那么我
  • angularjs + spring mvc + json post请求

    我一直在网上对我的问题进行一些研究 我觉得我的代码反映了大多数示例中编写的内容 然而 它仍然不起作用 这就是我的问题 长话短说 我想发送 POST 请求以将新项目添加到某些 后端 对于 REST API 我使用 Spring MVC 为了发
  • 拒绝 then() 的承诺

    你怎么能拒绝来自其内部的承诺then 例如 Promise all promiseArr then gt if cond reject catch gt do something 我发现的唯一相关问题是 如何拒绝来自 then 函数内部的承
  • 将事件添加到本机日历不起作用

    我正在开发一个 Android 应用程序 我必须将事件添加到本机 Android 日历中 所以我尝试了以下代码 if Build VERSION SDK INT gt 8 l eventUri Uri parse content com a
  • AuthnProviderAlias ldap 可以与 Apache2.4.x 一起使用吗?

    这在 Apache2 2 中完美运行 但在 2 4 中则不然 我need现在使用2 4
  • 在 Discord.js 中将 Bot 作为前缀提及

    仅当我不向整个命令添加空格时 我的前缀才有效 例如 token prefix lt 453463055741747200 gt const Discord require discord js module exports run asyn
  • 按特定顺序对 JavaScript 对象数组进行排序(使用现有函数)

    给定一个对象数组 key a value 42 key d value 28 key c value 92 key b value 87 和一个键数组 c a b d 是否有 ECMAScript 函数或第 3 方 JavaScript 库
  • 从列表中删除不在另一个列表中的元素 - Kotlin

    我有两个 mutableList listOfA 有很多对象 包括重复项 而 listOfB 则较少 所以我想使用 listOfB 来过滤 listOfA 中的相似对象 这样所有列表的末尾都会有相同数量的具有相同键的对象 下面的代码可以解释
  • Linux 中程序信息的存储位置和方式

    我是 Linux 新手 我只是把它弄乱了 但现在我想让我的 Java 程序在 Linux 上运行 我在互联网上快速浏览了一下 找到了目录列表及其说明 usr lib似乎是我存储程序信息的最佳位置 但我刚刚在我的 VirtualBox VM
  • 如何使用 javascript 更改 YUI3 选项卡

    我想提供一个使用 YUI3 更改选项卡的附加链接 我有一个表单分布在多个选项卡上 因此在选项卡内容的底部我想要一个 继续 链接 该链接将用于下一个选项卡 有任何想法吗 myTabView selectChild index 是以编程方式更改
  • 在 pandas 数据帧上使用 str.contains [重复]

    这个问题在这里已经有答案了 这个 pandas python 代码生成错误消息 TypeError 一元 的操作数类型错误 float 我不知道为什么 因为我正在尝试操作 str 对象 df Anomalous Vendor Reasons
  • PHP SOAP 客户端可以理解多部分消息吗?

    有这样的神兽吗 简单的SOAP客户端 http www php net soapPHP 附带的不理解多部分消息 提前致谢 原生 PHPSoapClient http de3 php net manual en class soapclien
  • 面板双缓冲

    通过将 AllPaintingInWmPaint UserPaint 和 DoubleBuffer ControlStyles 的值设置为 true 可以对整个表单进行双缓冲 this SetStyle ControlStyles AllP
  • 如何使 Python 脚本独立可执行,无需任何依赖即可运行? [复制]

    这个问题在这里已经有答案了 我正在构建一个 Python 应用程序 不想强迫我的客户安装 Python 和模块 那么 有没有办法将Python脚本编译为独立的可执行文件呢 您可以使用py安装程序 http www pyinstaller o
  • 父docker中的CMD是否被子docker镜像中的CMD/ENTRYPOINT覆盖?

    我正在尝试深入了解 docker 我知道CMD or ENTRYPOINT用于指定docker镜像的启动 可运行命令CMD被覆盖ENTRYPOINT 但我不知道 当父 docker 镜像也有时 它是如何工作的CMD OR ENTRYPOIN
  • 将 DIV 放置在具有可变高度的固定 div 下方

    问题是这样的 可以说我有这样的东西 div div div div div div 我希望 below div 位于 top div 下方 但不使用 margin top 因为 top div 将具有不同的大小 此外 below div 的
  • Criteria查询规范中不同类型的合并规范

    我有一个Activity实体位于 ManyToOne有关系Event实体及其相应的元模型 Activity and Event 由 JPA 模型生成器生成 我创建了专门的课程ActivitySpecifications and EventS
  • 跨多个模块定义谓词的各个部分

    我正在尝试写一个谓词move 3它处理多种术语 每种术语都在单独的文件中定义 我正在尝试为此使用模块 因为这些文件包含其他应适当命名空间的谓词 所以 我创建了一个模块cat prolog内容 module cat move 3 multif