递归 Prolog 谓词?

2023-12-14

我目前正在开发一个项目,我想在 Prolog 中实现辅助谓词

break_down(N, L)

其工作原理如下

?- break_down(1,L).
L = [1] ;
false.
?- break_down(4,L).
L = [1, 1, 1, 1] ;
L = [1, 1, 2] ;
L = [1, 3] ;
L = [2, 2] ;
L = [4] ;
false.

对于任何正整数 N 依此类推。

我已经尝试并实现了一个仅生成第一个结果的代码,我无法获得其余的结果,这是我的代码

break_down(1,[1]).
break_down(N,L):-
   N>0,
   N1 is N-1,
   break_down(N1,L1),
   append(L1,[1],L).

它仅生成第一个输出结果:

 L = [1, 1, 1, 1] ;

有什么建议如何编辑我的代码以获得其余的吗?


这是使用普通整数算术和回溯的直接递归实现:

break_down(N,L) :-
    break_ref_down(N,1,L).       % reference item is initially 1

break_ref_down(0,_,[]).
break_ref_down(N,Z0,[Z|Zs]) :-
    between(Z0,N,Z),             % multiple choices
    N0 is N-Z,
    break_ref_down(N0,Z,Zs).     % pass on current item as reference

示例查询:

?- break_down(8,Zs).
  Zs = [1,1,1,1,1,1,1,1]
; Zs = [1,1,1,1,1,1,2]
; Zs = [1,1,1,1,1,3]
; Zs = [1,1,1,1,2,2]
; Zs = [1,1,1,1,4]
; Zs = [1,1,1,2,3]
; Zs = [1,1,1,5]
; Zs = [1,1,2,2,2]
; Zs = [1,1,2,4]
; Zs = [1,1,3,3]
; Zs = [1,1,6]
; Zs = [1,2,2,3]
; Zs = [1,2,5]
; Zs = [1,3,4]
; Zs = [1,7]
; Zs = [2,2,2,2]
; Zs = [2,2,4]
; Zs = [2,3,3]
; Zs = [2,6]
; Zs = [3,5]
; Zs = [4,4]
; Zs = [8]
; false.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归 Prolog 谓词? 的相关文章

  • Prolog 中的聊天机器人

    我一直在尝试在序言中创建一个聊天机器人 作为作业 到目前为止 我已经在 pl 文件中创建了一个数据库 并且列出了很多可能的对话 我知道序言是这样工作的 例如如果我们有 Chatbot good 然后我们输入 Chatbot good 它会回
  • 如何在 swi-prolog 的 prolog 文件中运行 prolog 查询?

    如果我有一个定义规则的 prolog 文件 并在 Windows 中的 prolog 终端中打开它 它会加载事实 然而 然后它显示 提示我手动输入一些内容 如何将代码添加到文件中 以便它实际上会评估这些特定的语句 就像我输入它们一样 像这样
  • Prolog 中的迷你数独求解器中途停止

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

    我正在尝试用简单的极小极大算法来解决井字游戏 简单 但应该涵盖很多语言 到目前为止我所拥有的 该板表示为 9 个 未绑定 变量的数组 这些变量可以设置为x or o 获胜条件基本上是 win Player X1 X2 X3 X1 Playe
  • 在 Prolog 中动态拆分列表

    我从序言开始几周 但我看到了更深入的操作列表的递归谓词的构造 我的问题是 是否可以构建一个谓词 将给定列表拆分为给定数量的其他列表 比如我想象的 split H T NumberLists Lists 递归实现 split 1 2 3 4
  • 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 也许有人可以告诉我如何实现和
  • 如何用 Java 或 C# 等语言实现统一算法?

    我正在读我拿到的人工智能教科书 我已经解决了我的部分的最后一个作业问题 以您选择的任何语言实施第 69 页概述的统一算法 在第 69 页 您有以下统一算法的伪代码 function unify E1 E2 begin case both E
  • 如何解决创建 SwiftData #Predicate 的编译器错误?

    我一直在尝试很多方法来解决这个问题 我正在尝试使用谓词获取 SwiftData 记录 但我尝试的一切都会导致两个错误 初始化程序 init 要求 Item 符合 Encodable 初始化程序 init 要求 Item 符合 Decodab
  • 在 C++ 中通过引用传递 std 算法谓词

    我正在尝试从 a 中删除元素std list并保留已删除元素的一些统计信息 为此 我使用列表中的remove if 函数 并且我有一个谓词 我想使用这个谓词来收集统计数据 这是谓词的代码 class TestPredicate privat
  • 如何找到排列的索引

    index List Idx Predicate will get List with permutation and I want to know index of permutation For example index 4 1 3
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • 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
  • 谓词对于列表中的所有元素都必须为 true

    我有一组事实 likes john mary likes mary robert likes robert kate likes alan george likes alan mary likes george mary likes har
  • Prolog中如何选择bagof、setof和findall

    如何在 bagof setof 和 findall 之间做出选择 有什么重要的区别吗 哪个最常用 哪个最安全 感谢您的评论 回答 我检查了SWI Prolog 手册页findall 3 http www swi prolog org pld
  • 查找相邻成员

    我必须找出列表中的两个成员是否相邻 限制是使用append 3谓词 到目前为止 我已经完成了下面的操作 如果它是真的 它就有效 否则我得不到答案 就像它永远运行一样 adjacent X Y L append L1 X Y T1 appen
  • SWI-Prolog 中的跨模块“接口”调用

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

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

    我有一个清单 a b a a a c c 我需要为每个元素添加两次以上的出现 最终结果应该是这样的 a a a b b b a a a a a c c c c 如果列表中有一个与下一个项目相同的项目 那么它会继续下去 直到出现一个新项目 当
  • Java 使用函子连接集合

    给定 2 个具有相同数量元素的集合 例如List
  • 如何为这个“移动块”Prolog 练习实现求解谓词?

    我正在使用 Ivan Bratko 的书 人工智能编程 学习 Prolog 我发现实施拟议练习的最后部分有些困难 该练习是一个使用图形来决定如何移动块并按顺序排列它们的程序 这是与程序必须执行的操作相关的图像 正如您在上图中看到的 可以使用

随机推荐

  • 为什么 $ra 被调用者保存在 RISC-V 中

    我发现在 RISC V 中 ra调用者是否已保存 以 MIPS 为单位 ra是被调用者 这意味着在 RISC V 中被调用者可以直接更改ra没有保存 但自从ra已经改变了 被调用者如何返回调用者 无论名称如何 RISC V ra 和 MIP
  • NSTimer 在 iPhone 中关闭应用程序后继续计数

    我有一个计时器 最多可以计时 8 小时 28800 秒 之后它应该被释放 我想知道如何让计时器在后台运行和 或在应用程序关闭时保持运行 这是 NSTimer stopWatchTimer NSTimer scheduledTimerWith
  • 如何在构建另一个容器期间填充 Mysql docker 容器?

    我正在尝试构建一个 docker compose 文件 该文件自动为我的应用程序构建一个容器和一个存储所有数据的 mysql 容器 在我的应用程序的 dockerfile 中 我有一个脚本 用于设置应用程序运行所需的所有数据库表和预设值 是
  • 将最近 7 天的 Windows 事件导出到 evt 文件

    很难相信我只花了一个小时在网上搜索 却找不到一个看似简单的请求的答案 我想要做的就是获取最近 7 天的 Windows 系统和应用程序事件 并将每个事件作为 evt 格式的文件导出到特定文件夹 所以不是 csv 或 xml 有没有一种简单的
  • 使用 AJAX - WooCommerce API 将变体添加到购物车?

    我有一个包含以下数据的项目 var item id 124 name xxx price 13 13 quantity 1 options size xl color pink 当用户单击 添加到购物车 时 我想使用 WC API 发出 A
  • 如果超过 12 列自动换行,我们真的需要关闭它吗?

    我已经使用 Bootstrap 一段时间了 特别是版本 3 并且注意到我仍然不确定是否应该始终在每 12 列之后关闭带有 row 类的列 或者我可以等待并在我的代码末尾应用该结束 row 只要据我所知 任何在单行中加起来超过 12 列的列都
  • 将 STUFF 与 INNER JOIN 查询结合使用

    我的数据库中有三个表 产品表 类型表和名为 Prod Type 的映射表 我的数据库是sql server 这就是为什么我不能使用group concat函数而我正在使用Stuff函数 我的表结构如下 产品表 Prod ID Name Br
  • Eclipse 构建路径不可用

    The build path option is not available when I right clicked on one of the the jars I wanted to include Anybody knows why
  • git 分支名称中的 Powershell 和德语变音符号

    我编写了一个批处理文件 它使用 powershell 命令删除除要保留的分支之外的所有本地 git 分支 如果分支名称中使用了德语变音符号 则不起作用 切换到分支 master 您的分支是最新的 origin master 已删除分支 DE
  • 如何使用 javascript 检索数组中 17 textBox 的值

    我写了下面的代码 太长了 我想要一些更短的代码 b 0 parseInt document getElementById textbox1 value b 1 parseInt document getElementById textbox
  • 从一个类访问另一个类的结构

    是否可以从另一个类访问结构 ex class A struct structOfClassA func returnLetterA gt String return a class B let classA A init classA st
  • 如何让 Gson 序列化基本名称值对列表?

    我正在尝试使用类型适配器和 Gson 序列化 BasicNameValuePairs 列表 ArrayList
  • 如何解码中文文本中的unicode

    with open result txt r as f data f read print What type is my data print type data for i in data print what is i print i
  • 重命名后Golang相对包导入

    我的 GOPATH 是 Users peter goworkspace 我当前的 golang 版本 go version go1 6 darwin amd64 我在这个工作区下有多个golang项目 所以这是目录结构 goworkspac
  • $(this) 和 this 位于点击事件中

    我有一个自己的 js 类 并尝试在点击事件中使用 jquery 的 this 和 object this jquery 的 this 工作正常 但对象 this 未定义 http jsfiddle net j33Fx 2 var mycla
  • Pandas:当条件和条件满足时找到最大值

    我有一个数据框 df id volume saturation time delay normalised speed BPR free speed BPR speed Volume time normalised 27WESTBOUND
  • asp.net mvc视图页面上可以有webform控件吗?

    asp net mvc视图页面上可以有webform控件吗 我想我之前读过它 但我不确定它是如何工作的 因为 MVC 不使用视图状态等 可以 但是 Viewstate 不可用 因此 如果控件依赖于视图状态 则可能会出现故障 此外 事件也不会
  • 不使用 WMI 访问主板信息

    我需要在多个进程的应用程序中访问主板标识 序列号 制造商等 我已经能够使用 WMI 成功查询此信息 但我正在寻找替代方案 如果您想了解情况 我的一些应用程序行为根据硬件配置或是否设置了特定环境变量 用于测试目的 而有所不同 bool IsV
  • android listview交替行颜色但具有默认光标选择

    我已经遍及整个网络 包括 stackoverflow 但似乎无法找到一个清晰的完整方法 我想创建一个 ListView 1 有交替的颜色 我可以用下面的代码做到这一点 2 保留了android默认的橙色选择行为 为了完成 1 我有一个自定义
  • 递归 Prolog 谓词?

    我目前正在开发一个项目 我想在 Prolog 中实现辅助谓词 break down N L 其工作原理如下 break down 1 L L 1 false break down 4 L L 1 1 1 1 L 1 1 2 L 1 3 L