Prolog,如何在 write() 中显示多个输出

2024-04-05

go :-   match(Mn,Fn),
        write('--Matching Result--'),
        nl,
        write(Mn),
        write(' match with '),
        write(Fn),
        match(Mn1,Fn1).


person(may,female,25,blue).
person(rose,female,20,blue).
person(hock,male,30,blue).
person(ali,male,24,blue).
match(Mn,Fn):-person(Fn,'female',Fage,Fatt),
person(Mn,'male',Mage,Matt),
Mage>=Fage,
Fatt=Matt.

嗨,这是我的代码...但它只能显示 1 个输出...但是 match(X,Y) 中有 3 对匹配。如何在我的 go 函数中显示它们。

谢谢


如果强制回溯,通常通过输入,您将获得所有匹配项;(例如在 SWI Prolog 中)。但你也看到你得到了不必要的输出true。这是因为最后一个子句go is match(Mn1,Fn1)。该子句成功三次并绑定变量Mn1,Fn1但那时只有true是输出,因为你没有write()在该条款之后。第四次match(Mn1,Fn1)失败并且通过回溯你回到第一个子句match(Mn,Fn)匹配,输出匹配,等等。

您肯定不希望出现这种行为。你应该删除最后一个子句match(Mn1,Fn1) in go。现在按;你得到 3 个匹配但没有任何输出true之间。

但您可能想要的是程序进行回溯。为了实现这一点,你只需要通过添加来强制回溯false作为最后一个条款。要获得正确的输出格式,请使用以下程序。最后一条go2.相加得到true在最后。

go2 :- write('--Matching Result--'), nl,
    match(Mn,Fn),
    write(Mn), write(' match with '), write(Fn), nl,
    fail.
go2.

这种技术称为故障驱动循环.

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

Prolog,如何在 write() 中显示多个输出 的相关文章

  • YAP Prolog 中的正向链接?

    我需要在某些 Prolog 问题中使用前向链接器 我想避免使用普通元解释器从头开始实现它 但如果没有其他选项可用 这就是我必须要做的 因为使用元解释器执行此操作会很慢 而且我我确信应该有一些好的实现 有人知道 YAP 或 SWI Prolo
  • 如何在 GNU Prolog 中使用“long int”?

    所以基本上看来 GNU Prolog 在我的 32 位 x86 Linux 上使用 28 位整数 下面的代码无法编译 foo A A0 is 0xdeadbeef A1 is A0 gt gt 8 A2 is A0 gt gt 16 A3
  • 如何在 Prolog 中为变量(如字符串)分配多个值?

    今天早些时候 我寻求帮助以在序言中构建数据库以及如何通过参数搜索 有人提出了这个 您还可以向每个处理器添加术语列表 例如 processor pentium g4400 brand intel family pentium series g
  • 寻找最大最小值集合

    我正在尝试编写一个 天真的或半天真的 程序 给定一组元素和许多玩家将其划分为这个数量的玩家 并且对于每个这样的划分取最小值 按总和 子集 然后 我想计算所有这些最小除法的最大值 这被称为https en wikipedia org wiki
  • Prolog 中的迷你数独求解器中途停止

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

    我想要一个包含三个元素 A B 和 C 的列表 L 并具有以下约束 use module library clpfd L A B C L ins 1 3 A B C 但是 它给出了一个错误 Syntax error Operator exp
  • 如何在 Prolog 中计算数字序列的和

    任务是计算从0到M的自然数之和 我使用SWI Prolog编写了以下代码 my sum From To From gt To my sum From To S From 0 Next is 1 S is 1 my sum Next To S
  • Prolog 实现 and/2、or/2、nand/2、nor/2、xor/2 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在序言中实现以下谓词并将它们用于真值表 and 2 or 2 nand 2 nor 2 xor 2 也许有人可以告诉我如何实现和
  • 转换句子会产生无限循环 - 但如何转换呢?

    我不明白这是哪里出了问题 请注意 我对 Prolog 很陌生 我确信我错过了一些东西 只是不知道那可能是什么 有人可以帮我吗 谢谢 这是我的代码 printSentence printSentence W write W write nl
  • 计算序言中列表的排列

    在 序言艺术 第二版中有一个问题 您应该定义一个谓词 Even permutation Xs Ys 和类似的奇数排列 当您查询时 例如 Even permutation 1 2 3 2 3 1 和 odd permutation 1 2 3
  • 以系统的方式报告 Prolog 中查询失败的“原因”

    我正在 Prolog 中寻找一种方法 模式或内置功能 我可以用它来返回why一组谓词失败 至少就数据库中的谓词而言 当用户在系统中提出查询时 我试图能够说的不仅仅是 那是错误的 例如 假设我有两个谓词 blue 1如果某物是蓝色的 则为真
  • 如何为有效号码指定 DCG?

    我正在尝试为有效数字指定 DCG 如下所示 value Number gt valid number Number 基本上检查指定的值是否是数字 它也可能是变量 因此有必要检查 我不知道如何构建这个valid number不过 DCG 谓词
  • Prolog内存问题

    我想找到一种方法来分析我在序言中编写的谓词 一个巨大的谓词 的内存使用情况 我目前正在运行它swi http www swi prolog org and yap http www dcc fc up pt vsc Yap document
  • 根据一个值找到列表内列表的最小值

    我在序言中有这个列表 dublin london 1000 dublin moscow london 5000 我想计算列表的最小值 这样答案应该是 dublin london 1000 这个问题有一些类似的问题序言中列表列表中的最小值 h
  • SWI-Prolog 中的跨模块“接口”调用

    这可能是 SWI Prolog 模块系统特有的 假设我们有三个 Prolog 模块 在 SWI Prolog 模块系统中 robin 在文件中robin pl arthur 在文件中arthur pl helper 在文件中helper p
  • Prolog 中的隔离列表

    我很难理解如何让我的代码显示由偶数和奇数组成的隔离列表 我什至不确定我的理解缺乏什么 显然我对这门语言很陌生 必须在学校使用它 我的命令式和功能性思维不会让我知道这到底是怎么回事 哈哈 现在 不 我不是要求你做我的作业 我只是请你帮我看看我
  • 一次性删除不正确的后续解决方案

    我有一个谓词 它找到正确的解决方案 但随后又找到不正确的解决方案 data D data threshold nonredundantbumps D 5 Bs write D 3 6 7 8 2 4 5 6 9 4 7 3 D 3 6 7
  • 如何验证涉及 diff/2 约束的交换性?

    围绕 diff 2 约束有很多炒作 特别是作为对 2 和 2 的某些非声明性的救援 这种非声明性通常被描述为非单调性 并给出了非交换性的例子 但是测试涉及 diff 2 的测试用例是否可交换的方法是什么 这是我想要做的元解释 我做了交换性测
  • 序言中的“如果”?

    有没有办法在序言中执行 if 操作 例如如果变量为 0 则执行一些操作 将文本写入终端 甚至不需要 else 但我找不到 if 的任何文档 是的 ISO Prolog 中有这样一个控制结构 称为 gt 你像这样使用它 condition g
  • Prolog,确定图是否是非循环的

    我需要定义一个谓词 acycling 1 它将一个图作为输入并确定该图是否是非循环的 所以根据我的理解 graph1 a b graph1 b c graph1 c a 将返回 no 和 graph2 a b graph2 b c 将返回是

随机推荐

  • 是否可以使用 XSLT 跳过层次结构中的级别?

    层次结构采用 XML 格式 我使用 XSLT 来转换数据 例如 如果层次结构有 4 个级别 并且我想跳过中间的一个级别 例如第 3 级 Level 1 Level 2 Level 3 Skip this level Level 4 Leve
  • 仅使用 CSS 的最大高度和最大宽度

    我的第一篇文章在这里 我使用 div 以相同的比例 180wx170h 裁剪缩略图 在处理肖像和风景图像时 我陷入了困境 如果我使用它 这对于肖像风格的图像来说很好 crop img max height 170px width auto
  • 为 C# 应用程序制作安装程序并将 .NET Framework 安装程序包含到安装程序中

    我已经完成了 C 应用程序 但有一个小问题 当我尝试在另一台 PC 上运行应用程序时 我始终需要安装 NET Framework 4 0 有什么办法可以使其工作而无需从互联网安装框架吗 我之前尝试过创新设置 http www jrsoftw
  • JVM跳转指令的偏移量怎么会是32768呢?

    在写一个回答有关 JVM 字节码偏移量的问题 https stackoverflow com a 30240357 3182664 我注意到 javac 的行为和生成的类文件中有一些我无法解释的内容 当编译这样的类时 class FarJu
  • C++/Fortran 中贝塞尔函数的集成 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在 Fortran 或 和 C 中对包含贝塞尔函数的方程进行从 0 到 无穷大 的数值积分 我在matlab中做了 但对于较大的输入和特
  • 设置 FieldRenderer 的 Item 或 DataSource 属性的好方法是什么?

    场景是我有很多 FieldRenderer 这些应该从不同的地方输出数据 一些来自项目 X 另一些来自项目 Y 并且应该输出项目 Z 的属性 假设我有公共财产ItemX我想从中输出一个属性 以下任何一个都可以 但我没有得到他们中任何一个的输
  • Angular2 路由 - 当路由更改时保持组件的状态[重复]

    这个问题在这里已经有答案了 我有一个应用程序 其视图位于路由后面 我需要能够从路由更改时的位置继续 但返回后 组件处于初始状态 有什么办法可以保持组件的状态吗 update 2 现在已针对新路由器修复了这个问题 Angular 2 3 ht
  • 如何在 MATLAB 中随机排列 3D 矩阵中的列

    我有 3D 矩阵 10000 x 60 x 20 我需要排列第二维和第三维以保持列完整 对于 2D 矩阵 我使用 RANDPERM pidx randperm size A 2 Aperm A pidx 我不能只应用 RANDPERM 两次
  • 如何在表中表示 nil

    假设我想存储一个元素列表 包括一些零值 值的位置很重要 我需要表示列表中给定位置处不存在值 这里有一个问题 a 1 2 3 nil 4 for k v in ipairs a do print k v end print a 4 print
  • html中的方括号是什么意思?

    我现在正在协助一个项目 第一次构建模板 试图解决一些问题 但 html 中令我困惑的一个方面是方括号中的某些内容 我以前从未在 html 中使用过这些 所以我只是想知道它们的用途 当我在浏览器中打开页面时 它们都显示为文本 这是一些代码 d
  • Excel - 多项选择下拉列表 - 不重复选择

    我在 Excel 电子表格上开发了可以使用以下代码在下拉列表中选择多个项目的方法 Private Sub Worksheet Change ByVal Target As Range Dim rngDV As Range Dim oldVa
  • 如何使用 CakePHP APP 类从 URL 加载 XML 文件?

    我正在使用 CakePHP XmlHelper 来解析 XML 文件 例如 App import Xml file my xml file xml parsed xml new XML file 我如何使用它从 URL 加载 XML 文件
  • MySQL 日期比较过滤器

    我有一些运行良好的 SQL 代码 并从我的 Wordpress 数据库返回所需的结果 但是 我根本无法理解如何过滤以下日期之间的日期 2010 12 10 00 00 00 and 2010 12 15 00 00 00 这是我的 SQL
  • 如何使用 ffmpeg-python 在视频上叠加帧序列?

    我在下面尝试过 但它只显示背景视频 background video ffmpeg input input mp4 overlay video ffmpeg input f frames folder png pattern type gl
  • 跳过多个号码

    我正在尝试将正则表达式用于我正在做的工作项目 我有一组数字 如下所示 23 14 62 121 98 0 0 0 1 0 0 0 2 165 60 00 24 13 64 118 101 0 0 0 1 0 0 0 2 165 60 00
  • VBA更改模块中的实例变量(excel)

    在 VBA 中 我需要一个模块 sub 来告诉实例设置一些变量 在模块 1 中我有 Sub Load ThisWorkbook SetupVariables ThisWorkbook TestVariables End Sub 在本工作簿中
  • 在Windows下使用通过MSYS2安装的cmake 3.5.2,缺少“MinGW Makefiles”生成器

    我正在尝试使用 MinGW 作为编译器 在 Windows 下进行 hello world 测试来制作 cmake 这个答案 https stackoverflow com a 4101496 4063051建议运行cmake与 G标志如下
  • 在 Mac OS X 中从相机捕获视频

    如何在 MacOS X 中过滤来自摄像头的视频流 我编写了 QuickTime 序列采集器通道组件 但仅当应用程序使用 SG API 时它才有效 如果应用程序使用 QTKit Capture 则该组件无法工作 有人知道我该如何实施它吗 您可
  • 如何围绕未正确发布的值演示竞争条件?

    我正在阅读 Java 并发实践 并查看第 51 页的示例代码 根据该书 这段代码如果没有正确发布 就有失败的风险 因为我喜欢编写示例代码并分解它们以证明它们是如何工作的 我尝试让它抛出 AssertionError 但失败了 引导我走向我的
  • Prolog,如何在 write() 中显示多个输出

    go match Mn Fn write Matching Result nl write Mn write match with write Fn match Mn1 Fn1 person may female 25 blue perso