河内塔序言

2024-02-26

您好,我在实施河内塔时遇到问题。 我需要打印包含必要动作的列表列表,但我的算法仅在光盘数量为 N=1 时才起作用。 这是我的代码

move(1,X,Y,_,L) :-  
    append([X],[Y],L).
move(N,X,Y,Z) :- 
    N>1, 
    M is N-1, 
    move(M,X,Z,Y),
    move(1,X,Y,_), 
    move(M,Z,Y,X).

这是当N=1时的结果。

?- move(1,left,right,_,L).

L = [left,right]

(16 ms) yes

我需要这样的东西

    L = [[left,center],[left,right],[center,right],[left,center],[right,left],
      [right,center],[left,center],[left,right],[center,right],[center,left],
[right,left],[center,right],[left,center],[left,right],[center,right]]

When N=4

如果有人可以帮助我,我将不胜感激。


描述时lists在 Prolog 中,始终考虑使用dcg /questions/tagged/dcg符号!

例如,考虑:



moves(1, X, Y, _) --> [X-Y].
moves(N, X, Y, Z) -->
    { N #> 1,
      M #= N-1 },
    moves(M, X, Z, Y),
    moves(1, X, Y, _),
    moves(M, Z, Y, X).
  

请注意,这...

  • uses fewer论点
  • avoids指某东西的用途append/3.

我也冒昧地使用了...

  • 名字moves//4明确我们正在描述moves, not a single move.
  • CLP(FD)声明性算术的约束(更容易理解)
  • (-)/2用于表示pairs,正如 Prolog 中的惯例。

示例查询,使用phrase/2DCG 的接口谓词:



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

河内塔序言 的相关文章

  • 如何声明两个列表具有相同的长度?

    我需要知道如何比较 Prolog 中两个列表的长度 这是我到目前为止所拥有的 sum N1 N2 checklength N1 N2 checklength N1 N2 L1 is length N1 What L2 is length N
  • 如何在 SWI-Prolog 中创建事实?

    我只想创建类似的东西 like x y 我已经尝试了很长时间了 真的很沮丧 谁能告诉我该怎么做 我假设您正在交互地使用 swi 并尝试输入事实会给您一个如下错误 1 like x y ERROR toplevel Undefined pro
  • 如何使用 Prolog 查找二叉树的深度

    我正在学习 Prolog 并试图找到一个深度二叉树使用 Prolog 我代表一棵树是这样的 nil is a tree tree 1 nil nil this is a leaf tree 1 tree 1 nil nil nil this
  • Prolog 中的聊天机器人

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

    如果我有一个定义规则的 prolog 文件 并在 Windows 中的 prolog 终端中打开它 它会加载事实 然而 然后它显示 提示我手动输入一些内容 如何将代码添加到文件中 以便它实际上会评估这些特定的语句 就像我输入它们一样 像这样
  • 如何从序言中的列表中删除列表?

    我想在序言中实现以下问题 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 中的迷你数独求解器中途停止

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

    我想要一个包含三个元素 A B 和 C 的列表 L 并具有以下约束 use module library clpfd L A B C L ins 1 3 A B C 但是 它给出了一个错误 Syntax error Operator exp
  • 求解序言中极其简单的方程:A = B + C?

    我有一个非常简单的方程 我希望能够在序言中求解 A B C 我希望能够编写一个谓词来表达这种关系 它可以处理任何一个未实例化的参数 无需推广到更复杂的关系或方程 myEquation A B C something 我可以使用以下语义进行调
  • 如何在 Prolog 中计算数字序列的和

    任务是计算从0到M的自然数之和 我使用SWI Prolog编写了以下代码 my sum From To From gt To my sum From To S From 0 Next is 1 S is 1 my sum Next To S
  • 控制 Prolog 变量值选择

    灵感来自之前的一个问题 https stackoverflow com questions 41595786 using operator to save variables in a list我尝试实现一些可以枚举布尔表达式可能性的东西
  • SWI Prolog 使用的检查优化会发生什么情况?

    去引用SICStus Prolog 手册 https sicstus sics se sicstus docs 3 12 9 html sicstus Occur html 逻辑编程背后的通常数学理论禁止 创建循环项 规定发生检查应该是 每
  • Prolog 过滤自定义目标失败的所有元素的列表

    我正在尝试写一个谓词filter List PredName Result 过滤一个List目标的所有要素PredName失败并随后返回Result列表 谓词PredName 1应该在调用过程时定义filter 3例如可以是 test N
  • 如何在 Prolog 中解决这个算术表达式难题?

    我有一个编程问题 https blog svpino com 2015 05 08 solution to problem 5 and some other thoughts about this type of questions htt
  • Prolog:子句在源文件中不在一起

    我有这段代码 Family tree female pen male tom male bob female liz female pat female ann male jim parent pam bob parent tom bob
  • Prolog中如何选择bagof、setof和findall

    如何在 bagof setof 和 findall 之间做出选择 有什么重要的区别吗 哪个最常用 哪个最安全 感谢您的评论 回答 我检查了SWI Prolog 手册页findall 3 http www swi prolog org pld
  • 一次性删除不正确的后续解决方案

    我有一个谓词 它找到正确的解决方案 但随后又找到不正确的解决方案 data D data threshold nonredundantbumps D 5 Bs write D 3 6 7 8 2 4 5 6 9 4 7 3 D 3 6 7
  • 将 SWI Prolog 代码编译为 Windows 可执行文件 - 解析器 Grails3 项目

    我正在尝试构建解析器 Grails3 项目https github com RichardMoot Grail https github com RichardMoot Grail谁的教程是http www labri fr perso m
  • SWI Prolog 转义引号

    我需要在序言中将 放在字符串周围 我从另一个程序获取输入 看起来我无法转义该程序中的 因此我必须在序言中添加 否则序言语句将不起作用 感谢您的帮助 为了讨论strings https stackoverflow com a 39922411

随机推荐

  • 对于定点组合器 Y,什么是 \x.f(xx)

    对于 Y 组合子定理 For every function F there exists an X such that FX X 什么是F意思是这里 固定点是什么F x x 1 我的理解是x 1 x没有解决办法吗 对于下面的证明 For a
  • 检查 ArrayList 是否包含另一个 ArrayList 中的每个元素

    我在这里可能找不到一句简单的话 但这是我的问题 如何检查 ArrayList 是否包含另一个 ArrayList 中的所有对象 我正在寻找 如果存在的话 类似的东西 INCORRECT EXAMPLE if one contains two
  • 在 JavaScript 中创建 ISO 日期对象

    我设置了一个 mongo 数据库 在 mongoDb 中创建新的日期对象 创建 ISO 格式的日期对象 例如 ISODate 2012 07 14T00 00 00Z 我正在使用 node js 连接到 mongo 数据库并查询数据库 每当
  • NodeJS、OpenCV 和使用 Net Socket 的流图像

    我的最终目标是将视频从我的笔记本电脑流式传输到服务器 我正在尝试通过在笔记本电脑和服务器上使用 NodeJs 来完成此任务 我使用 OpenCV 库在笔记本电脑上捕获视频并将其保存为 jpg 文件 然后 我读取该文件并将其转换为 base6
  • 远程 ListView 在 Android 小部件上闪烁

    我在远程列表视图方面遇到了意外的麻烦问题 我的应用程序有一个简单的小部件 其中包括一个列表视图 如果列表视图的单元格高度为 1 并且列表视图位于滚动的开始处 则每次调用 datasetchanged 时它都会闪烁 闪烁 有趣的是 如果列表视
  • Yii2 日期比较验证

    我有如下所示的模型规则 但它不起作用 它总是显示错误消息 public function rules return start date end date date format gt php F d Y start date compar
  • 如何在 MATLAB 中对连接的点进行聚类?

    想象一下 我们有很多点 其中一些点连接在一起 我们想要将它们聚类 请看下图 如果我们有 连接矩阵 点 我们如何将它们聚类为两组 连接点组 ConnectivityMatrix 1 2 1 3 2 4 2 3 2 1 3 1 3 2 3 4
  • startMonitoringSignificantLocationChanges 和 startUpdatingLocation 如何相互影响?

    如果我打电话会发生什么startUpdatingLocation while startMonitoringSignificantLocationChanges在跑 重要的位置变化监控是否停止 如果我那么stopUpdatingLocati
  • JSON 字符串错误地映射到文本视图

    我有 3 个文本视图 我试图用 JSON Http 响应中的数据填充它们 但它们当前填充的是响应中的错误数据 由于某种原因 它没有解析字段并正确分配它们 看起来它只是用 JSON 响应中的数据开头填充每个文本视图 截屏 JSON HTTP
  • 如何添加 MSAccess 连接到 CodeIgniter 或 CakePHP?

    我正在尝试使用 Microsoft Access 数据库进行演示项目 我正在考虑在 CodeIgniter 或 CakePHP 中进行该项目 忽略使用 Microsoft Access 可能存在的愚蠢行为 我无法准确地弄清楚连接字符串如何与
  • 将多个单选按钮绑定到单个布尔值

    背景 我有一个包含三个布尔值的模型 public class PageDataModel public bool setting1 get set public bool setting2 get set public bool setti
  • 附加!在计划中?

    我目前正在学习 R5RS 方案 来自 PocketScheme 我发现我可以使用内置于方案的某些变体 但不是全部 中的函数 Append 换句话说 破坏性地改变列表 我对实际代码并不感兴趣 而是对答案感兴趣 而是对将列表作为函数 或向量或字
  • CSS3 文本阴影效果与 jQuery

    我希望能够创建与 CSS3 text shadow 属性相同的效果 使其可供不支持此 CSS3 属性的浏览器 例如 IE 7 和 8 使用 所以我找到了两个插件 文字阴影 https web archive org web 20141108
  • Qt:无法从输入设备读取:没有这样的设备

    我有一个在嵌入式 Linux 平台 i Mx 6 上运行的 Qt 应用程序 我的应用程序应支持触摸屏作为主要输入设备和可选的 USB 键盘 如果已连接 所以现在 我已配置要启动的应用程序 如下所示 my qt app plugin tsli
  • 可更新的 VIEW 不适用于 Postgres 9.5 中的 ON CONFLICT

    PostgreSQL 版本 9 5 4 我有一个表定义为 CREATE TABLE IF NOT EXISTS TEST 1 ID SERIAL PRIMARY KEY C1 BYTEA C2 TEXT NOT NULL C3 BOOLEA
  • 如何从多维数组中找到最大的数组[重复]

    这个问题在这里已经有答案了 可能的重复 获取多维数组中元素的最大值 https stackoverflow com questions 2189479 get the maximum value from an element in a m
  • 获取 Instagram 访问令牌

    我们有一个客户 他的网站上有一个简单的 Instagram 功能 可以按特定标签提取照片 他们只是注意到它不起作用 收到错误 访问令牌无效 我想从一号开始就因为更新了 我们过去不需要访问令牌 因为我们没有对用户做任何事情 只是标签 现在看来
  • Nuxt.js - 在页面中添加两个布局

    我是初学者Nuxt js我正在将 Vue 项目转换为 Nuxt js 并且我想在一个页面上使用两种布局 默认的一个和另一个 逻辑是这样的 第一个布局是 默认 或所有页面上的标题 第二个布局是设置栏 In settings我的页面有 3 条路
  • Vue3 + Vite + Typescript:作用域插槽类型错误

    我有一个包含以下 devstack Vue3 Vite TypeScript 的项目 并且出现以下错误v slot Element implicitly has an any type because expression of type
  • 河内塔序言

    您好 我在实施河内塔时遇到问题 我需要打印包含必要动作的列表列表 但我的算法仅在光盘数量为 N 1 时才起作用 这是我的代码 move 1 X Y L append X Y L move N X Y Z N gt 1 M is N 1 mo