Prolog 中发生检查的简单最坏情况是什么?

2023-12-21

许多论文确实指出,如下所示的方程统一问题可能会在指数时间内运行,当occurs_check=true。没有规定这是一个顶级查询或子句主体,它只是等式统一问题:

   X1 = f(X0, X0),
   X2 = f(X1, X1),
   ..
   Xn-1 = f(Xn-2, Xn-2),
   Xn = f(Xn-1, Xn-1).

如果为真,这可能是发生检查的最坏情况,因为正常的变量共享统一是线性的。每个 Prolog 系统都 是否必须将这个方程统一问题视为最坏情况?

如果 Prolog 系统没有occurs_check=true标志,可以尝试unify_with_occurs_check/2代替(=)/2.


这是一个比较。我在子句体内测试了等式统一问题。测试源代码和基准测试结果的链接位于此答案的末尾:

test :-
    B = f(A, A),
    C = f(B, B),
    D = f(C, C),
    X = f(D, D).

Etc..

Jekejeke Prolog 1.4.6 和 SWI-Prolog 8.3.17 仍然是线性的。 Jekejeke Prolog 使用静态分析,并不总是有效。 SWI-Prolog 是动态执行的,我猜想是处理循环项的副作用。但 GNU Prolog 1.4.5 是指数级的。我使用 n=4、6、8 和 10:

开源:

线性还是指数?
https://gist.github.com/jburse/2d5fd1d3dd8436acceca52fdfc537581#file-size-pl https://gist.github.com/jburse/2d5fd1d3dd8436acceca52fdfc537581#file-size-pl

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

Prolog 中发生检查的简单最坏情况是什么? 的相关文章

  • 如何在SWI-Prolog中启用所有统一中的发生检查?

    根据维基百科 https en wikipedia org wiki Occurs check 为所有统一提供声音统一的实现是 Qu Prolog 和 Strawberry Prolog 以及 可选地 通过运行时标志 XSB SWI Pro
  • Prolog 中不带双精度的列表的所有组合

    有没有一种简单的方法可以获取列表的所有组合而无需双精度 没有双打我的意思是也没有彼此的排列 所以不行 a b c and c a b or c b a 因此对于输入 a b c 输出将是 a b c a b a c b c a b c 我只
  • Prolog 中的分配性检查

    假设我有一个等价关系eq 以及多个二元运算符o 1 o 2 o n 我想找出哪些操作分配给其他操作 假设我有一个可以确定两个表达式是否等价的知识库 一个简单的解决方案是输入所有可能的查询 对于左分配性 eq o 1 Z o 1 X Y o
  • Prolog 中的掩码

    我最近一直在尝试理解 Prolog 并且一直在搞乱 Prolog 中的列表列表 我正在尝试创建一种我想在 p 中的面具 序言 我有一个谓词 它确定 Prolog 中两个列表列表 比如说 L1 和 L2 之间的差异 并将它们保存为列表列表 比
  • 如何提高词法分析效率?

    在解析一个 3 GB 的大文件时DCG https www metalevel at prolog dcg 效率很重要 我的词法分析器的当前版本主要使用 or 谓词 2 http www swi prolog org pldoc doc f
  • 函数式语言中的多线程? (序言)

    当我的朋友在学校开始学习 Prolog 时 我嘲笑他学习了一门无用的语言 然而 他向我展示了一些我从来不知道可能发生的东西 我想知道这个技术从何而来 技术是这样的 permutation List isAMember X List dele
  • Prolog 程序从列表中删除每个第 n 个元素

    您能帮我解决以下问题吗 编写三元谓词delete nth从列表中删除每个第 n 个元素 样本运行 delete nth a b c d e f 2 L L a c e false delete nth a b c d e f 1 L L f
  • 获取 Prolog 中的解决方案列表

    我正在学习 Prolog 并且正在阅读一本名为 人工智能 Prolog 编程 的书 作为练习 我想学习如何扩展本书中的示例之一 有人可以帮忙吗 假设您有以下事实 parent pam bob pam is a parent of bob p
  • AllegroGraph 检查现有三元组

    我正在使用 AllegroGraph 4 我有一个三元组存储 并且只有在新的三元组尚不存在时我才会尝试添加它们 这是我的 Prolog 查询 select news alfas news a news tst has annotation
  • 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
  • Prolog 追加与剪切运算符

    当我们使用append和cut操作符时会出现什么问题 append2 L L append2 H T L H TL append2 T L TL 我尝试了几种不同的输入 但总是成功 append2 1 2 5 L L 1 2 5 appen
  • Prolog - 删除非唯一元素

    我有一个谓词来检查元素是否是列表的成员 并且看起来如下 member X X member X T member X T 当我打电话时 member 1 2 3 1 4 我明白了 是的 现在我必须使用它来编写谓词 该谓词将从列表列表中删除所
  • 如何在 Prolog 中求反

    我是 PROLOG 新手 正处于练习的开始阶段这一页 https sites google com site prologsite prolog course a first glimpse 给定规则parent X Y 和male X 我
  • 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 中的匹配元组

    为什么Prolog匹配 X Xs 包含更多元素的元组 一个例子 test2 X Xs write X nl test2 Xs test2 X write X nl test
  • Prolog 匹配 vs miniKanren 统一

    在 Prolog 人工智能编程中 Bratko 在第 58 页说了以下内容 Prolog 中的匹配对应于逻辑中所谓的统一 但是 我们避免使用 统一 这个词 因为出于效率原因 在大多数 Prolog 系统中 匹配的实现方式并不完全对应于统一
  • 转换句子会产生无限循环 - 但如何转换呢?

    我不明白这是哪里出了问题 请注意 我对 Prolog 很陌生 我确信我错过了一些东西 只是不知道那可能是什么 有人可以帮我吗 谢谢 这是我的代码 printSentence printSentence W write W write nl
  • Prolog 罗马数字(属性语法)

    我正在做一项作业prolog questions tagged prolog扫描数字列表并应返回该列表是否是有效的罗马数字以及数字的十进制值 前任 1 roman N I N 1 true 2 当我运行我认为应该工作的程序时 十进制值总是正
  • SWI Prolog 使用的检查优化会发生什么情况?

    去引用SICStus Prolog 手册 https sicstus sics se sicstus docs 3 12 9 html sicstus Occur html 逻辑编程背后的通常数学理论禁止 创建循环项 规定发生检查应该是 每

随机推荐

  • 使用 Pipenv 安装本地依赖项的依赖项

    背景 我们的项目具有以下高级目录结构 datascience core setup py notebooks Pipfile web Pipfile Excluded all the irrelevant files and directo
  • 在 C# 中安全地生成 SQL 查询

    在 C 中生成 SQL 查询的最安全方法是什么 包括清理用户输入以防止注入 我正在寻找一个不需要外部库的简单解决方案 使用 SQL 参数 http msdn microsoft com en us library system data s
  • 如何在 Android 上禁用移动数据

    在有人告诉我购买应用程序之前 先简单介绍一下背景故事 我刚买了一台 EVO 它很快就耗尽了电池电量 我下载了 JuiceDefender 来管理我的移动数据连接 这看起来效果相当不错 然而 设置非常有限 即使在付费版本上也是如此 截至目前
  • 使用 Facebook 登录中的 UserID 识别 Facebook Messenger 用户

    我正在尝试新的 Facebook Messenger 平台 但遇到了一些问题 当用户第一次与我的机器人聊天时 我想使用sender id在我的数据库中查找用户并验证他们是否是客户并提供更量身定制的用户体验 用户使用 Facebook 登录注
  • 如何使用win环境变量“pathlib”保存文件?

    我正在尝试使用 win 环境变量 例如 userprofile desktop with pathlib到不同用户 PC 中的安全文件 但我无法让它工作 它一直保存在运行脚本目录中 import pathlib from datetime
  • 在线程/进程中启动 python Bottle 以及旁边的另一个守护进程

    好吧 这可能有点不正统 或者我只是愚蠢 或者两者兼而有之 我正在尝试一种非常简单的设置 在其中启动一个瓶子服务器Process实例并在另一个实例中启动一个小型 TFTP 服务器 usr bin env python import bottl
  • 在 Javascript 中检查所有复选框第二次不起作用

    第一次选中所有复选框可以很好地选中和取消选中 但第二次则不行 代码如下 HTML th align left width 25 style color FFF background color 3A4048 th JQUERY select
  • 为什么 NSFetchRequest.shouldRefreshRefetchedObjects 不起作用?

    我正在尝试在一个上下文中更新并保存托管对象 然后在另一个上下文中访问更新的属性值 的文档shouldRefreshRefetchedObjects says https developer apple com documentation c
  • 如何设置热图纵横比

    我有一个单通道图像 其中每个整数像素值映射到一个字符串 例如 5 gt 人 我正在尝试创建一个交互式图像 将鼠标悬停在像素上将显示其相应的字符串 我认为使用绘图热图可能是做到这一点的方法 我遇到的问题是 真的很慢 如果我将 numpy 数组
  • Hibernate 多对多映射与附加列?

    我需要在许多生成的表中添加额外的列 有 2 个实体彼此之间存在多对多关联 用户多对多组 Entity public class User other fields private Set
  • ndb 一对多建模:重复 KeyProperty 与外键的优点

    我的问题是关于在 ndb 中建模一对多关系 我知道这可以通过 至少 两种不同的方式来完成 使用重复属性或使用 外键 我在下面创建了一个小例子 基本上我们有一篇文章可以有任意数量的标签 假设标签添加后可以删除但不能更改 我们还假设我们不担心交
  • 如何强制嵌套列表项与父列表项具有相同的宽度?

    我有一个水平家长列表 某些列表项在单击时会显示嵌套的垂直列表 如何强制垂直子列表中的项目与父列表项目的宽度相同 See jsFiddle http jsfiddle net BXnxc 1 HTML ul class mainMenu ho
  • 如何处理来自BackgroundWorker线程的异常?

    在 WPF 应用程序中 我有一个预定的数据库访问任务 由计时器定期运行 并且该任务已在 BackgroundWorker 线程中执行 当连接尝试失败时 我通过以下方式引发异常try catch构造 我想更新 UI 线程中的状态栏文本 是否有
  • C# 函数接受 Enum 项并返回枚举值(而不是索引)

    假设我有以下声明 public enum Complexity Low 0 Normal 1 Medium 2 High 3 public enum Priority Normal 1 Medium 2 High 3 Urgent 4 我想
  • 从 Firebase Web 应用程序发送邮件

    var express require express var app express var nodemailer require nodemailer var transporter nodemailer createTransport
  • Nestjs:如何构建nestjs应用程序并生成dist文件夹?

    我正在尝试编写 jenkins shell 脚本来部署 Nestjs 应用程序 我尝试 npm run start prod 这个生成 dist 文件夹 但它也提供我不需要它的应用程序 如何构建应用程序 你可以运行 npm run buil
  • x:Key="{x:Type TextBox}" 的作用是什么?

    一切都在标题中 我不止一次读过设置这样的样式 大致相当于 上次在对另一个问题的评论中 https stackoverflow com questions 4853272 how to set a comboboxs style inside
  • 从 CDATA 中检索值

    我正在使用 java JAXB 我想从中检索数据CDATA 所需输出 Need Help 任何人都可以帮助我吗 我尝试了几种解决方案 Thanks try this XmlAccessorType XmlAccessType FIELD p
  • 为什么类名不大写会导致编译器错误?

    这个 Groovy 脚本运行良好 println 0 class MyClass public MyClass int j public MyClass method return this 此操作因编译错误而失败 意外标记 公共位于行 5
  • Prolog 中发生检查的简单最坏情况是什么?

    许多论文确实指出 如下所示的方程统一问题可能会在指数时间内运行 当occurs check true 没有规定这是一个顶级查询或子句主体 它只是等式统一问题 X1 f X0 X0 X2 f X1 X1 Xn 1 f Xn 2 Xn 2 Xn