为什么循环引用和递归会使我的程序失败?

2023-12-05

我写了这个简单的 Prolog 程序。

man(socrates).
mortal(X) :- man(X).
immortal(X) :- immortal(X).

我问了它一些常见的问题,比如苏格拉底是不是一个人,或者苏格拉底是否是一个凡人。

?- man(socrates).
true.                    //we know for a fact that Socrates is a man
?- mortal(socrates).
true.                    //and it can logically be inferred that Socrates is mortal
?- immortal(socrates).
                         //but we can't seem to figure out if he's immortal

由于递归定义而崩溃immortal。循环引用也会导致崩溃或出错Out of stack space.

在我看来,至少在这种情况下,普罗洛格先生得出的结论是,从程序中的规则不能推断出苏格拉底是不朽的,这是相当微不足道的。如何?我想它可以检查堆栈并查看它是否正在遍历已经遍历过的规则。

是否有原因尚未实施?这样做是否会出现一些我忽略的问题,或者 Prolog 的实现是否已经执行了此类分析?


在我看来,至少在这种情况下,普罗洛格先生得出的结论是,从程序中的规则不能推断出苏格拉底是不朽的,这是相当微不足道的。

Prolog 使用不完全推理算法来提高效率。它旨在成为一种编程语言,其中程序除了程序意义之外还具有逻辑意义,而不是成熟的定理证明者。您必须小心编写子句的顺序,防止循环定义等。

至于你的谓词的逻辑含义immortal, it's

immortal(X) -> immortal(X)

这是一个同义反复,可以从您的程序/理论中删除而不改变其逻辑含义。这意味着如果它有助于改善程序意义(摆脱无限循环),您应该将其删除。

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

为什么循环引用和递归会使我的程序失败? 的相关文章

  • 递归和大O

    我最近正在完成一项涉及递归和大 O 表示法的计算机科学作业 我相信我很好地理解了这一点 虽然当然不是完美的 但是有一个问题给我带来了最多的问题 奇怪的是 一看就知道是作业上最简单的一个 使用大哦符号提供最佳增长率来解决以下递归问题 T 1
  • Scala REPL 中的递归重载语义 - JVM 语言

    使用 Scala 的命令行 REPL def foo x Int Unit def foo x String Unit println foo 2 gives error type mismatch found Int 2 required
  • 用于从深层嵌套列表/元组中提取元素的递归函数

    我想编写一个从深层嵌套元组和列表中提取元素的函数 假设我有这样的东西 l THIS THAT a b c THAT d e f 我想要一个没有 这个 和 那个 的简单列表 list a b c d e f 这是我到目前为止所拥有的 def
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • 在堆栈已满并给出分段错误之前,C/C++ 中的最大递归函数调用次数?

    我正在做一个问题 我使用递归函数来创建线段树 对于较大的值 它开始出现分段错误 所以我之前认为可能是因为数组索引值越界 但后来我认为这可能是因为程序堆栈太大 我编写这段代码是为了计算系统出现段错误之前允许的最大递归调用次数 include
  • 通往楼梯顶部的可能路径

    这是一个非常经典的问题 我听说谷歌在他们的面试中使用过这个问题 问题 制定一个递归方法 打印从楼梯底部到楼梯顶部的所有可能的独特路径 有 n 个楼梯 您一次只能走 1 步或 2 步 示例输出 如果它是一个有 3 级楼梯的楼梯 1 1 1 2
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • Javascript - deepEqual 比较

    问题 来自 Eloquent Javascript 第二版 第 4 章 练习 4 编写一个函数 deepEqual 它接受两个值 并且仅当它们相等时才返回 true 是相同的值或具有相同属性的对象 其值也是 与对 deepEqual 的递归
  • Python最大递归,关于sys.setrecursionlimit()的问题

    我有一个问题sys setrecursionlimit 来自蟒蛇docs https docs python org 2 library sys html sys setrecursionlimit这个函数 将Python解释器堆栈的最大深
  • 我在函数的最后一次递归调用中得到“方案应用程序而不是过程”

    所以这是代码 define time prime test n newline display n start prime test n runtime define start prime test n start time if pri
  • Prolog 展平列表

    flatten A B R islist A gt flatten A R1 R R1 write A append A R1 R flatten B R1 flatten X X islist 这是我写的代码 但我有奇怪的问题 I get
  • 递归修剪对象中所有元素的更好方法?

    如果我有一个像这样的物体 const obj field subfield innerObj a asdasd asdas innerArr s ssad innerArrObj b adsad 我想出了这样的东西 const trimFi
  • Python如何处理无限递归?

    因此 在使用 Python 时 我注意到程序的堆栈大小基本上没有限制 继续对数字执行幂运算 即使在达到数千位之后 精度仍然保持完美 这让我想知道 如果我不小心进入了Python的无限递归循环怎么办 编译器会注意到并抛出堆栈溢出错误吗 或者程
  • 如何在 javascript 正则表达式中匹配平衡分隔符?

    我原以为这个问题是不可能的 据我所知 Javascript 的正则表达式既没有递归插值 也没有漂亮的 NET 平衡组功能 但问题就在那里 如问题 12 所示正则表达式 alf nu http regex alf nu 匹配平衡对 lt an
  • PHP递归遍历对象树[关闭]

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

    我需要以某种不同的方式合并一些数组 我使用 array merge recursive 然而 有一些事情我需要改变 但我不知道如何改变 这是来自 php net 的引用 但是 如果数组具有相同的数字键 则后面的值 不会覆盖原始值 但会追加
  • 卷积函数可以写成尾递归形式吗?

    我有一个函数 我想以尾递归形式编写 该函数计算求和的方法数k通过滚动s双面模具n次 我已经在上面看到了这个函数的数学解这个答案 https math stackexchange com questions 397689 why convol
  • 函数速度测试的奇怪结果

    我编写了一个使用递归来查找最大公因数 分母 的函数 gt gcd function a b if length a length b gt 1 warning Only scalars allowed using first element
  • 通过递归扩展 Prolog 目标?

    我 最终 实现了一些目标 这些目标将根据开始由 开始之后 and duration 然而 计划目标仅接受规定数量的任务 我想扩展计划目标的功能以接受单个列表并在计划时迭代该列表 不幸的是 我认为这将需要与can run and 冲突目标如下
  • Prolog 中的隔离列表

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

随机推荐

  • 如何在Python中导入类型提示的类?

    我有一个代码 from pandas import DataFrame def func df DataFrame gt DataFrame 因为我实际上并没有在代码中创建 DataFrame 对象 所以我想做 from typing im
  • 在其中创建 Angular 生命周期挂钩的 Highcharts 实例

    我目前正在使用 Angular 7 高图表API 我使用以下方法集成了 Highcharts官方 Github 链接 有一个callbackFunction在 Highcharts 中我们可以使用它来获取图表实例 但是 我还没有弄清楚两件事
  • 如何选择要在 TensorBoard 的嵌入选项卡中查看的检查点?

    简短的问题 如何选择在 TensorBoard 的嵌入选项卡中查看哪个检查点 问题的较长版本 我想用 TensorBoard 可视化词嵌入 为此 在阅读完官方教程 mirror 我添加了以下代码 embedding writer tf su
  • 调用托管属性的 getter 时出现 NPE

    我正在使用 Hibernate 学习 Spring 并使用 JSF 作为前端框架创建一个电影租赁应用程序 我的注册 bean 中有一个应用程序范围的托管属性 它是视图范围的 在里面register 方法将用户详细信息插入数据库中 我调用服务
  • C 代码中的内联汇编语句和适用于 ARM Cortex 架构的扩展 ASM

    我正在尝试编译以下两段代码ARM编译器5对于 Cortex A 微处理器 Part 1 static inline void cp15 write sctlr uint32 t value asm mcr p15 0 0 c1 c0 0 r
  • jQuery 与 ASP.NET WebForms - 禁用文本框

    另一个 jQuery 新手问题 我做错了什么 我有一些由 ASP NET 3 5 Webforms 呈现的 HTML 标记 如下所示
  • 更新 Android 联系人提供程序中的联系人图像

    我创建一个应用程序来读取 更新 删除联系人详细信息 这是更新 Contact Image 时出现的问题 当应用程序外部的设备添加新联系人时 没有图像 那么我们就无法更新联系人图片 我的更新代码是 ops add ContentProvide
  • 使用一个全局资源在 ASP.NET Web 表单中进行本地化

    我想要一些这样的资源文件 Mui resx Mui fr resx Mui es resx 我希望能够在我的代码隐藏中做这样的事情 Label1 Text Mui Hello 在我的 aspx 中是这样的 有人知道该怎么做吗 是否可以 对的
  • 如何从 VB.NET 打开 Outlook“新邮件”窗口

    我有一个场景 用户可以从网格中进行选择 已将文件上传到本地文件夹 当用户按 发送 时 应用程序应打开 Outlook 新邮件消息 窗口 其中选择的文件作为附件 用户选择的文件 来自网格 任何帮助将不胜感激 Imports System Di
  • 如何在 J2ME 中修改 XML 的值?

    假设有一个XML in my J2ME应用
  • CImg 的编译错误

    我是第一次使用 CImg 库 在使用仅包含 CImg h 的简单测试程序时出现编译错误 这是为什么 我怎样才能解决这个问题 程序代码 include headers CImg h using namespace cimg library i
  • Firebase 电子邮件验证不适用于 ActionCodeSetting

    我正在尝试实现对用户电子邮件的验证 使用电子邮件模板中的默认验证 URL 以及 ActionCodeSetting URL 动态链接 以将用户带回应用程序 我对 Firebase 的 ActionCodeSetting 电子邮件验证应该如何
  • 如何删除firestore集合数据库中的所有文档

    我使用 Firestore 数据库来存储和检索数据 每天晚上 Firestore 集合中都需要有新的数据集 文档 可用 那么有没有办法一次性完全删除集合中的所有现有文档 我尝试了那里的文档 它说我们需要一一删除 这是不可能的 因为文档ID是
  • 如何在 WinRT 中将字符串绘制到位图图像

    如何在图像中绘制字符串winRT 在 WinForms 中可以使用drawstring 里面的方法system drawing命名空间 但我在 WinRT API 中找不到其等效项 在 Windows 8 1 中 它们最终支持将 XAML
  • 如何在 PHP 中创建 Hashcash

    在网上搜索后 我找不到有关如何在 php 中创建哈希码的答案 我正在编写新闻通讯工具 但不想被列入黑名单 好吧 谁想要 我已经检查过我的反向 DNS SPF 和 spamhaus org 有人可以帮助我如何在 PHP 中创建 hashcas
  • Qt 5.8 和 Pdf.js 错误

    我的 pdf js 和 Qt 5 8 有问题 我尝试在此链接中执行相同的代码在 Qt5 8 中使用 pdf js在我的应用程序中 但他不工作我不知道为什么 qt向我显示这条关于JS的消息 js 未捕获类型错误 无法读取未定义的属性 PDFJ
  • Angular:更新服务并在控制器之间共享数据

    我正在使用服务从 API 获取一些数据 angular module myApp factory myService function q timeout var getMessages function var deferred q de
  • 如何在循环下的 markdown (knitr) 中包含多个plot3d

    我正在循环中使用plot3d rgl 绘制 3d 图表 knit rgl hooks 对于单个 3d 图形工作得很好 但在循环中使用时 markdown 文件不包含 3d 图形 另一种解决方案是包含多个rglwidget 价值观 你需要把它
  • 错误:将标头发送到客户端后无法设置标头

    我对 Node js 还很陌生 并且遇到了一些问题 我正在使用 Node js 4 10 和 Express 2 4 3 当我尝试访问时http 127 0 0 1 8888 auth facebook 我将被重定向到http 127 0
  • 为什么循环引用和递归会使我的程序失败?

    我写了这个简单的 Prolog 程序 man socrates mortal X man X immortal X immortal X 我问了它一些常见的问题 比如苏格拉底是不是一个人 或者苏格拉底是否是一个凡人 man socrates