Prolog 匹配 vs miniKanren 统一

2024-04-27

在 Prolog - 人工智能编程中,Bratko 在第 58 页说了以下内容。

“Prolog 中的匹配对应于逻辑中所谓的统一。但是,我们避免使用“统一”这个词,因为出于效率原因,在大多数 Prolog 系统中,匹配的实现方式并不完全对应于统一。正确的统一需要如此- 称为发生检查:给定变量是否出现在给定术语中?发生检查会使匹配效率低下。

我的问题是 miniKanren 的统一是否会遭受这种效率损失,或者这个问题如何解决?


这里有几个误解。首先,在 Prolog 中也可以使用 ISO 谓词进行声音统一unify_with_occurs_check/2.

其次,这种声音统一可以在某些 Prolog 系统中默认启用all统一。例如,参见occurs_checkSWI-Prolog 中的 Prolog 标志。

第三,很容易构造示例,其中启用发生检查会使您的程序顺序放大faster而不是禁用检查。

四、使用术语matching描述省略发生检查的统一是一个非常糟糕的主意:Matching表示函数式语言中的单向统一。在 Prolog 中,统一始终在所有方向上起作用,即使发生检查被禁用也是如此。

因此,对于问题的 Prolog 部分,如果您的 Prolog 系统支持,我强烈建议启用发生检查来测试您的程序。通常,发生检查的统一是required指示 Prolog 程序中的编程错误。因此,您可以设置该标志,以便系统抛出一个例外否则它会创建一个循环项。

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

Prolog 匹配 vs miniKanren 统一 的相关文章

  • 如何在 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
  • 如何实现 not_all_equal/1 谓词

    如何实施not all equal 1谓词 如果给定列表包含至少 2 个不同的元素 则该谓词成功 否则失败 这是我的尝试 不是很纯粹的尝试 not all equal L member H1 L member H2 L H1 H2 gt t
  • 寻找最大最小值集合

    我正在尝试编写一个 天真的或半天真的 程序 给定一组元素和许多玩家将其划分为这个数量的玩家 并且对于每个这样的划分取最小值 按总和 子集 然后 我想计算所有这些最小除法的最大值 这被称为https en wikipedia org wiki
  • 如何从序言中的列表中删除列表?

    我想在序言中实现以下问题 Given L1 1 2 3 4 and L2 2 3 4 调用名为remove list L1 L2 L 的函数将从L1中删除L2 所以L将是 1 但是 如果第二个列表的元素与 L1 中的元素顺序不同 或者更准确
  • 在序言中减去或添加列表的列表?

    我对序言相当陌生 正在尝试摆弄列表列表 我很好奇如何添加两个列表列表或减去它们从而得到一个列表列表 如果我有两个列表 可以说 SomeList 1 2 3 4 5 6 7 8 SomeList2 1 2 3 4 5 6 7 8 我该如何添加
  • Prolog 同构图

    这里尝试解决同构图问题 作业信息 判断2个无向图是否同构 没有孤立的顶点 顶点数小于30 图的边作为谓词给出 即 e 1 2 f 1 2 我正在尝试使用以下方法 对于每对边 即图 1 和图 2 中的每条边 Try to bind the v
  • 转换句子会产生无限循环 - 但如何转换呢?

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

    我正在阻止一个谓词来编码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:子句在源文件中不在一起

    我有这段代码 Family tree female pen male tom male bob female liz female pat female ann male jim parent pam bob parent tom bob
  • Same_length/2 更好的纯版本

    鉴于频繁的纯定义same length 2 as same length same length As Bs same length As Bs same length L L loops 是否有一个纯粹的定义不会在这种情况下循环 类似于纯
  • Prolog家谱

    我做到了 但没有显示答案 当我询问兄弟姐妹 叔叔 阿姨时 这是我写的 有什么问题吗 uncle X Y male X sibling X Z parent Z Y uncle X Y male X spouse X W sibling W
  • Prolog - 如何从输入文件的给定列表中创建变量列表?

    我有一个输入谓词将文件作为列表读取 输入 文件名 列表 该列表的格式将是 9 字面意思就是下划线字符 在这里 不是一个通配符 问题是我如何编写谓词 pred List List2 然后转换所有 进入变量但保留9还在同一个位置吗 所以如果我输
  • Prolog:如何在不重复的情况下创建所有可能的组合

    我正在尝试创建一个谓词来查找所有可能的组合而不重复相同的数字 我尝试使用排列谓词 但它发现了重复的列表 例如 permutation 0 1 1 L L 0 1 1 L 0 1 1 L 1 0 1 L 1 1 0 L 1 0 1 L 1 1
  • 列表中小于给定数字的数字

    xMenores xMenores X H T R Z xMenores X T Z X gt H R is H xMenores采用三个参数 第一个是数字 第二个是数字列表 第三个是一个列表 是将包含结果的变量 规则的目标xMenores
  • Prolog 在技术上是如何工作的?引擎盖下是什么?

    我想更多地了解 Prolog 的内部结构并了解它是如何工作的 我知道如何使用它 但不是它内部如何运作 Prolog 中使用的算法和概念的名称是什么 它可能会构建某种树结构或有向对象图 然后在查询时使用复杂的算法遍历该图 也许是深度优先搜索
  • WAM 中的扁平化形式

    WAM 教程重构指出查询 p Z h Z W f W 需要使用以下原则进行扁平化 话虽这么说 查询扁平化形式是 X3 h X2 X5 X4 f X5 X1 p X2 X3 X4 我对外部变量的定义感到困惑 请考虑以下内容 p Z h Y a
  • 将人员分配到床位 - 自动化方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我每年都会帮助举办青年营 将与会者分配到卧室是一项艰巨的任务 有 92 个卧室 活动持续一周 与会者停留的时间长短不一 而且床需要重复
  • Prolog 谓词参数中实例化模式指示符的含义

    查看Prolog文档 谓词签名有时会写成如下 foo Bar Baz Qux Mop 什么是 and 我该如何解释它们 另外 这些是唯一存在的还是还有更多 在这种情况下 这些前缀运算符代表实例化模式 即它们告诉您哪些参数应该是变量或在调用谓
  • prolog跟踪如何使用

    跟踪prolog程序时如何进行第二步 例如 我想跟踪以下简单程序 length1 0 length1 X Xs N length1 Xs N1 N is N1 1 我跟踪程序 trace length 1 2 3 N Call 7 leng
  • Prolog,确定图是否是非循环的

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

随机推荐

  • 如何在 django 中搜索具有 url 模式的字符串?

    我想为每个创建的帐户创建一个个人资料页面 创建后 可以像这样访问用户配置文件 http example com 用户名 http example com username 但在创建之前 我应该验证该 url 是否已经可用并且未被现有 url
  • Opengraph 和 music.listen

    尝试了几次使用 music listen 动作 最终尝试创建我们自己的聆听动作和歌曲对象 一些帖子表明 music listen 以及内置于动作和对象中的歌曲目前仅可供发布合作伙伴使用 有人能告诉我这是否属实吗 如果是 我们如何成为音乐 o
  • 在Java中,在哪里放置代码以在窗口关闭时可靠地触发?

    我有几个窗口 我想在用户采取操作关闭窗口 通过标题栏中的按钮 菜单项或我提供的按钮 之后和处理窗口之前保存默认值 有些窗口我可以DISPOSE ON CLOSE 但有些窗口我需要在它们被dispose 之前提供信息 窗体窗口关闭 http
  • fullCalendar 在同一天找到其他事件?

    我需要检测同一天的其他事件 我希望能够做的是 查找 eventClass X 的事件是否与 eventClass Y 的删除事件在同一天存在 如果不存在 它会警告用户 eventClass X 不存在 否则允许用户删除该事件 这可能吗 在探
  • 非成员规则在 Prolog 中无法按预期工作

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

    我一直在使用 SymPy 来扩展复杂偏微分方程的项 并希望使用 Collect 函数来收集项 然而 在处理微分变量不同的二阶 或高阶 导数时似乎存在问题 在下面的代码示例中collect expr6 有效 但是collect expr7 没
  • IOS:给@selector添加一个参数

    当我有这行代码时 UILongPressGestureRecognizer downwardGesture UILongPressGestureRecognizer alloc initWithTarget self action sele
  • 使用 iOS 7 在后台获取步骤

    我正在开发一个应用程序 我应该在其中获取我在体育活动期间所走的步数 我找到了这段代码 void countSteps UIAccelerometer sharedAccelerometer setUpdateInterval 1 0 KUP
  • PHP 中“

    默认情况下已启用从5 4 0开始 https www php net ChangeLog 5 php 5 4 0不管php ini设置
  • 如何编写虚拟机[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • c.JSON gin.H{()} 输出空对象

    我刚刚开始学习 GO lang 结合 Gin 框架 我决定编写一些简单的 api 来获取有关酒精饮料的数据 我当前的问题是 api get 方法http localhost 8080 alcohol drinks 返回空数据对象 My co
  • 不使用 PIN 的 Twitter 身份验证

    我正在尝试验证 Windows Phone 中的用户帐户 我找到了这个 C 库来完成这项工作 tweetsharp 他们的示例非常清楚 但他们使用 pin 码来验证用户身份 using TweetSharp Pass your creden
  • 从 Nipype docker 镜像 CommandNotFound 构建奇点配方

    我有以下奇点容器配方 bin bash Bootstrap docker From nipype nipype latest labels Version v1 0 post Install nano apt get update apt
  • 将不同的内容添加到 flutter moor 查询中

    我有以下颤动沼泽查询 select recipeGarnishes where tbl gt tbl postGarnish equals true get 我该如何添加distinct查询条件 更新 我想写的查询是 select DIST
  • Maven编译失败(但Eclipse下编译成功)

    在构建我的网络项目时Eclipse 一切安好 没有错误 没有警告 然而 在构建项目时Maven it failes 下面是输出形式mvn compile c Users jwa Desktop tets traffic web gt mvn
  • Azure 有害队列计数警报规则

    在之前的一个项目中 我设法设置了一个警报规则 该规则会查看有害队列消息计数 并在队列中存在某些内容时 每天一次 使用 webhook 向 slack 发出警报 我试图找到它在 Azure 中的位置 因为看起来事情已经发生了变化 如果这不是
  • 在php中生成随机字符串作为文件名[重复]

    这个问题在这里已经有答案了 我将如何创建与文件名一起使用的随机文本字符串 我正在上传照片并在完成后重命名它们 所有照片都将存储在一个目录中 因此它们的文件名必须是唯一的 有这样做的标准方法吗 有没有办法在尝试覆盖之前检查文件名是否已经存在
  • 将字符串转换为个位数并求和

    我花了几个小时尝试寻找解决方案来完成我认为很简单的任务 但我失败了 我有一个由 3 个不同字符组成的字符串 I R O 长度从 1 到 6 E g IRRROO RRORRR IIR RIRRO 每个字符代表一个数字I 1 R 2 O 3我
  • 什么是 NullPointerException,如何修复它?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 什么是空指针异常 java lang NullPointerException 以及是什
  • Prolog 匹配 vs miniKanren 统一

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