在 prolog 中生成从 N 到 1 的数字列表

2024-01-23

我正在尝试生成从 N 到 1 的数字列表,而不使用任何内置谓词(例如 findall 或 numlist)。我究竟做错了什么 ?

    pred(N,[H|T]):-  H is N, N1 is N-1, pred(N1,T).
    pred(1,[]).

我不断收到错误:超出全局堆栈


最完整的解决方案是:

pred(1, [1]).
pred(N, [N|T]) :-
    N > 1,
    N1 is N-1,
    pred(N1, T).

如果没有N > 1条件你仍然会得到堆栈溢出:

| ?- pred(3, L).

L = [3,2,1] ? ;

Fatal Error: global stack overflow (size: 32768 Kb, reached: 32765 Kb, environment variable used: GLOBALSZ)

但随着N > 1健康)状况:

| ?- pred(3, L).

L = [3,2,1] ? ;

(1 ms) no
| ?-

此外,在正确的条件下,谓词的顺序不再重要。这是因为您的条款只能在其应有的条件下有效。没有它,你的pred(N, [N|T]) :- ...子句,仅在以下情况下运行N > 1也会尝试运行时N =< 1。交换子句顺序只会隐藏这个问题,而且只是在一定程度上隐藏。然而,顺序对于效率来说很重要。

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

在 prolog 中生成从 N 到 1 的数字列表 的相关文章

  • 递归替换多维数组中特定键每次出现的值

    我有一个数组 其数组深度可能会有所不同 例如 array one gt array array something gt value array something2 gt value2 another gt anothervalue tw
  • 如何返回n对括号的所有有效组合?

    def paren n lst for x in range n current string join lst solutions list for i in range len current string 1 close curren
  • php 删除特定文件夹及其所有内容

    我正在使用 php 删除包含已删除帖子图像的文件夹 我正在使用下面的代码 这是我在网上找到的并且做得很好 我想知道当一个文件夹中有其他文件夹时 如何只删除其中的特定文件夹 当我使用下面的代码时 如何才能做到这一点 使用 dev images
  • 如何为有效号码指定 DCG?

    我正在尝试为有效数字指定 DCG 如下所示 value Number gt valid number Number 基本上检查指定的值是否是数字 它也可能是变量 因此有必要检查 我不知道如何构建这个valid number不过 DCG 谓词
  • 在Racket中将结构递归转化为累积递归

    我有一些代码来查找最大高度并将其替换为关联的名称 身高和姓名有单独的列表 每个列表的长度相同且非空 我可以使用结构递归来解决这个问题 但必须将其更改为累积递归 而且我不确定如何做到这一点 我见过的所有例子都让我困惑 有人能够将代码变成使用累
  • 如何在 Prolog 中解决这个算术表达式难题?

    我有一个编程问题 https blog svpino com 2015 05 08 solution to problem 5 and some other thoughts about this type of questions htt
  • 如何找到排列的索引

    index List Idx Predicate will get List with permutation and I want to know index of permutation For example index 4 1 3
  • 搜索深度嵌套数组以更新对象

    我有一个深层嵌套的数据结构 我有兴趣匹配数组 和数组数组 中的某个值 然后将一些数据推送到随附的数组中 例如以下是我的数组colors并伴随着的是更多颜色数组可能存在也可能不存在 var myData color green moreCol
  • Prolog:子句在源文件中不在一起

    我有这段代码 Family tree female pen male tom male bob female liz female pat female ann male jim parent pam bob parent tom bob
  • 我应该在 Prolog 和一般情况下避免尾递归吗?

    我正在阅读 立即学习 Prolog 在线书籍 以获取乐趣 我正在尝试编写一个谓词 该谓词遍历列表的每个成员并向其添加一个 使用累加器 我已经在没有尾递归的情况下轻松完成了 addone addone X Xs Y Ys Y is X 1 a
  • Javascript - deepEqual 比较

    问题 来自 Eloquent Javascript 第二版 第 4 章 练习 4 编写一个函数 deepEqual 它接受两个值 并且仅当它们相等时才返回 true 是相同的值或具有相同属性的对象 其值也是 与对 deepEqual 的递归
  • 需要使用 pyparsing 制作递归解析器的帮助

    我正在尝试使用 python pyparsing 进行解析 我在制作递归解析器时陷入困境 让我解释一下问题 我想要计算元素的笛卡尔积 语法是 cross elements element 我用更具体的方式 cross a c1 or cro
  • 合并xml文档

    我遇到的所有关于合并 XML 文档的解决方案都无法实现我的愿望 让我解释 XML 文档 1 a b title Original Section b title Original Child Section b b title Origin
  • 如何在 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
  • Prolog中如何选择bagof、setof和findall

    如何在 bagof setof 和 findall 之间做出选择 有什么重要的区别吗 哪个最常用 哪个最安全 感谢您的评论 回答 我检查了SWI Prolog 手册页findall 3 http www swi prolog org pld
  • 递归分割列表函数 LISP

    split list 函数接受一个列表并返回一个由两个列表组成的列表 其中两个列表由输入的交替元素组成 我写了以下内容 defun split list L cond endp L list NIL NIL t let X split li
  • Javascript 中的深平面多维数组[重复]

    这个问题在这里已经有答案了 我想编写一个可以深度展平给定数组的函数 例如 deepFlatten deepFlatten 1 2 3 1 2 3 deepFlatten 1 2 3 a b c 1 2 3 1 2 3 a b c 1 2 3

随机推荐

  • 使用 .aar NoClassDefFoundError 但类存在并且已 Dexed

    我有几个项目是为了创建 aar 而构建的 然后我将此 aar 导入到 Android Studio 的 libs 下 此依赖项的 build gradle 文件如下所示 repositories flatDir dirs libs depe
  • 我如何将 ╚ 放入批处理文件中

    我正在尝试在批处理文件中添加行 等 但是将它们直接插入批处理文件中会产生一些我没有输入的奇怪字符 我正在使用记事本 通过alt 200键入这些字符或者取决于我想要的字符 Windows 10 和命令提示符版本 10 0 10240 有什么解
  • 如何在node.js中使用基本身份验证从url获取用户名和密码? [复制]

    这个问题在这里已经有答案了 我需要获取浏览器从 url 发送到我的 node js 应用程序的用户名和密码 我挖掘了各种文档和对象 但找不到任何有用的东西 有人知道该怎么做吗 使用身份验证标头不是一个选项 因为现代的 Bowser 不设置它
  • 是否可以像IPC一样使用Mac OS X XPC在进程之间交换消息?如何?

    据 Apple 介绍 Lion 中引入的新 XPC Services API 为与 Grand Central Dispatch GCD 和 launchd 集成的基本进程间通信提供了一种轻量级机制 似乎可以使用这个 API 作为一种 IP
  • UIWebView 最初不加载某些 URL

    UIWebView 遇到如此奇怪的问题 我无法在网上找到解决方案 我有一个 iPad 应用程序 其中有网络视图 首次安装并运行应用程序时 我尝试加载一个教育网站 http my tac edu au 网络视图只是挂起并超时 我杀死了该应用程
  • 使用相同的内部表示和最少的样板处理多种类型?

    我发现自己在用 Haskell 编写大型程序时经常遇到一个问题 我发现自己经常想要多个不同的类型共享内部表示和几个核心操作 有两种相对明显的方法可以解决这个问题 一种是使用类型类 GeneralizedNewtypeDeriving扩大 将
  • SOAP 和 HTTP 协议的区别?

    SOAP 和 HTTP 协议有什么区别 当我们说 SOAP over HTTP 时 这是什么意思 您可以通过 HTTP 提供任何内容 例如 HTML 图像 声音 视频等 SOAP 是一种基于 XML 的消息编码 通常通过 HTTP 发送 但
  • 如何将比其父元素宽的元素居中?

    我目前有一个固定宽度为 900px 的 div 我想添加一个固定宽度为 950px 的子 iframe 并且我希望它与中心完美对齐 那怎么办呢 Thanks 您可以将子项放置在 50 处 然后使用负边距 即子项宽度的一半 parent po
  • 检查 php 脚本是否仍在运行

    我有一个脚本可以监听 jabber 服务器并做出相应的响应 虽然它不应该停止 但昨晚它却停止了 现在我想每分钟运行一个 cron 作业来检查脚本是否正在运行 如果没有运行则启动它 问题是 如何检查特定脚本是否仍在运行 一些解决方案已经发布h
  • C# 替换 docx 中的文本字符串

    使用 C 有没有一种好方法可以在 docx 文件中查找和替换文本字符串 而无需在该计算机上安装 word 是的 使用Open XML http openxmldeveloper org default aspx 这是一篇解决您的具体问题的文
  • 以 table.column 格式返回 Oracle 列名?

    是否有任何设置或方法可以用来让 Oracle 返回结果 table table
  • 如何使用Vite从公共目录导入JSON文件?

    我有一个 Vue3 Vite 项目 其中一些数据必须从外部 JSON file 但是当我构建项目时 JSON 文件被捆绑 我需要将 JSON 文件保留在外部 我尝试过的 第一次尝试vite config ts export default
  • 从高级编辑器更改数据类型与数据转换

    我正在使用 SSIS 创建一些包 我对周围感到困惑数据转换变换组件并从高级编辑器更改列数据类型 如果我可以进入高级编辑器并更改输出的数据类型 为什么我需要输入数据转换 这只是取决于偏好还是使用两种方法之间有区别吗 在展示两种方法之间的差异之
  • 附加文件时的 Rails ActiveStorage 范围

    使用 ActiveStorage 时 如何创建附加文件的范围 例如 class Check lt ActiveRecord Base has one attached image end 我想要类似的东西Check has attached
  • angularJS element.on 回调和作用域.$apply

    在此示例中 我有一个带有附加指令的输入 该指令旨在在输入旁边显示消息 还有另一个输入和一个用于添加消息的按钮 显示一些消息后 关注带有附加指令的输入应该会清除消息 http jsfiddle net viro WBqxf http jsfi
  • 使用 PHP 创建目录中所有类的实例

    我有一个包含多个 PHP 文件的目录 这些文件由与文件同名的类组成 Sample php的班级将被称为Sample 每个类都有一个名为的函数OnCall 如何在我的目录中创建每个类的实例并执行它们的所有OnCall s 我无法手动完成 sa
  • 为什么 ASP.NET Core 本地化不起作用

    我创建了一个空项目 启动 cs public void ConfigureServices IServiceCollection services services AddLocalization s gt s ResourcesPath
  • 如何向 MKPointAnnotation 添加按钮?

    我刚刚在尝试向注释点添加详细信息按钮时陷入困境 不幸的是我不知道该怎么做 有人可以帮我吗 The image below presents what I d like to achieve Thanks MapKit 视图控制器 impor
  • 重构复杂的嵌套数组

    我有一个像这样的数组 var my array 2 9 10 5 10 11 4 11 9 1 19 2 41 10 7 17 3 0 11 4 18 5 中的数组my array包括另外两个数组 第一个数组不是必需的 但看看第二个 mya
  • 在 prolog 中生成从 N 到 1 的数字列表

    我正在尝试生成从 N 到 1 的数字列表 而不使用任何内置谓词 例如 findall 或 numlist 我究竟做错了什么 pred N H T H is N N1 is N 1 pred N1 T pred 1 我不断收到错误 超出全局堆