在序言中随机播放

2024-01-01

我正在尝试在序言中编写一个过程,其中如果 L1 = [1,2,3] 且 L2 = [4,5,6] 那么 L3 = [1,4,2,5,3,6]

so shuffle([1,2,3],[4,5,6],[1,4,2,5,3,6])

到目前为止我有这个:

shuffle([X],[Y],[X,Y]).
shuffle([X|Xs],[Y|Ys],_) :- shuffle(Xs,Ys,Z), shuffle(X,Y,Z).

这是我第一次尝试编写序言代码,因此我仍在尝试了解语法、规则和所有内容。

我理解这个逻辑,我只是​​不确定如何实现它,所以任何帮助将不胜感激!

Thanks!

Edit:我已经弄清楚了。如果有人感兴趣的话,这是解决方案:

shuffle([X],[Y],[X,Y]).  
shuffle([X|Xs],[Y|Ys],[Z1,Z2|Zs]) :- shuffle([X],[Y],[Z1,Z2]),shuffle(Xs,Ys,Zs).

shuffle([], B, B).
shuffle([H|A], B, [H|S]) :- shuffle(B, A, S).

在这类问题中,通常困难的部分不是Prolog,而是确定解决它的最简单的递归关系。

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

在序言中随机播放 的相关文章

  • 依赖规则顺序

    为了计算两个相同长度列表之间的汉明距离 我使用foldl hamm A B 0 R 有了这个定义hamm 4 hamm A A V V hamm A B V0 V1 A B V1 is V0 1 第一条规则的删减可以防止不必要的回溯 然而
  • 执行树元解释

    我有根据我之前的问题制作的跟踪元解释器here https stackoverflow com questions 27235148 implementing cut in tracing meta interpreter prolog 我
  • 寻找最大最小值集合

    我正在尝试编写一个 天真的或半天真的 程序 给定一组元素和许多玩家将其划分为这个数量的玩家 并且对于每个这样的划分取最小值 按总和 子集 然后 我想计算所有这些最小除法的最大值 这被称为https en wikipedia org wiki
  • 如何从序言中的列表中删除列表?

    我想在序言中实现以下问题 Given L1 1 2 3 4 and L2 2 3 4 调用名为remove list L1 L2 L 的函数将从L1中删除L2 所以L将是 1 但是 如果第二个列表的元素与 L1 中的元素顺序不同 或者更准确
  • Prolog 管线任务

    我有一项任务是在序言中制作一张简化的地铁地图 其中一部分要求制定一项规则来检查两个车站是否在同一条线上 我有一条规则 但它似乎不起作用 这就是我到目前为止所拥有的 adjacent nh lg central 4 adjacent lg o
  • 转换句子会产生无限循环 - 但如何转换呢?

    我不明白这是哪里出了问题 请注意 我对 Prolog 很陌生 我确信我错过了一些东西 只是不知道那可能是什么 有人可以帮我吗 谢谢 这是我的代码 printSentence printSentence W write W write nl
  • 列表中的连续元素

    我正在阻止一个谓词来编码Prolog 我需要对两个谓词进行编码 如果我打电话 u a b c d e f X 它会给X a b X b c X c d 如果我打电话 v a b c d e f X 它会给X a b X c d X e f
  • 导入 csv 文件数据以填充 Prolog 知识库

    我有一个 csv 文件example csv其中包含两列 标题为 var1 和 var2 我想填充一个最初为空的 Prolog 知识库文件import pl具有重复的事实 而每一行example csv处理方式相同 fact A1 A2 f
  • SWI Prolog 使用的检查优化会发生什么情况?

    去引用SICStus Prolog 手册 https sicstus sics se sicstus docs 3 12 9 html sicstus Occur html 逻辑编程背后的通常数学理论禁止 创建循环项 规定发生检查应该是 每
  • 以系统的方式报告 Prolog 中查询失败的“原因”

    我正在 Prolog 中寻找一种方法 模式或内置功能 我可以用它来返回why一组谓词失败 至少就数据库中的谓词而言 当用户在系统中提出查询时 我试图能够说的不仅仅是 那是错误的 例如 假设我有两个谓词 blue 1如果某物是蓝色的 则为真
  • 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
  • Prolog DCG:找到最后一个元素

    我正在尝试更好地理解 DCG 的用途 为了做到这一点 我尝试将 LearnPrologNow 书中的一些练习转换为 DCG 表示法 然而 我却失败得很惨 我试图编写一个程序 仅命名列表中的最后一个元素 就这样 我只是想不出正确的 DCG 语
  • 如何验证涉及 diff/2 约束的交换性?

    围绕 diff 2 约束有很多炒作 特别是作为对 2 和 2 的某些非声明性的救援 这种非声明性通常被描述为非单调性 并给出了非交换性的例子 但是测试涉及 diff 2 的测试用例是否可交换的方法是什么 这是我想要做的元解释 我做了交换性测
  • Prolog:如何在不重复的情况下创建所有可能的组合

    我正在尝试创建一个谓词来查找所有可能的组合而不重复相同的数字 我尝试使用排列谓词 但它发现了重复的列表 例如 permutation 0 1 1 L L 0 1 1 L 0 1 1 L 1 0 1 L 1 1 0 L 1 0 1 L 1 1
  • 这个版本的trace有什么问题?

    我有这个跟踪元解释器 它是为 swi prolog 编写的 trace Goal trace Goal 0 trace true Depth true trace fail Depth fail trace A gt B Depth A g
  • Prolog 列表列表获取所有元素

    我有一个列表列表 decide 1 2 3 2 3 6 4 K 我想按 返回所有可能的解决方案 规则是首先返回其列表大小为 1 的值 然后我想返回其大小大于1的值 size 0 size Xs L size Xs N L is N 1 he
  • 如何使用append/3在prolog中递归构建列表?

    我需要了解一些事实的价值 这部分似乎正在发挥作用 fact1 A Val1 fact2 B Val2 A B 但是一旦我尝试附加这些值 Val1 Val2 通过使用append 3谓词到列表 OutList 我只得到一个可能的解决方案 而不
  • json 获取 prolog 谓词

    我试图在序言中创建这个谓词 谓词json get 3可以定义为 json get JSON obj Fields Result 这是正确的 当Result可以通过以下方式恢复 中的字段链Fields 列表 从JSON obj 一个字段 代表
  • prolog跟踪如何使用

    跟踪prolog程序时如何进行第二步 例如 我想跟踪以下简单程序 length1 0 length1 X Xs N length1 Xs N1 N is N1 1 我跟踪程序 trace length 1 2 3 N Call 7 leng
  • 下面代码中的修剪选择点如何使其更加高效(Prolog)?

    在下面给出的代码中 有 cut 修剪选择点以提高效率 我非常确定reverse谓词和agent do moves谓词是必不可少的 solve task Task Cost agent current position oscar P sol

随机推荐