Prolog 中不带双精度的列表的所有组合

2024-03-18

有没有一种简单的方法可以获取列表的所有组合而无需双精度。没有双打我的意思是也没有彼此的排列。所以不行[a,b,c] and [c,a,b] or [c,b,a].

因此对于输入 [a,b,c] 输出将是:

[a]
[b]
[c]
[a,b]
[a,c]
[b,c]
[a,b,c]

我只能找到双打(排列)的解决方案


这个问题的解决方案相当简单:显然空集中只有一种组合:空集:

combs([],[]).

此外,对于每个元素,您可以决定是否添加它:

combs([H|T],[H|T2]) :-
    combs(T,T2).
combs([_|T],T2) :-
    combs(T,T2).

由于您按照列表的顺序选择(或删除),这可以保证您以后不会重新决定选择a。如果你喂它[a,b,c],它永远不会生成类似的东西[b,a,c],因为一旦决定挑选/放下a,它不能添加b并重新决定a.

运行这个给出:

?- combs([a,b,c],L).
L = [a, b, c] ;
L = [a, b] ;
L = [a, c] ;
L = [a] ;
L = [b, c] ;
L = [b] ;
L = [c] ;
L = [].

如果您想以相反的方式生成它(进行更多测试以首先删除元素,而不是添加它们,您可以简单地交换递归语句):

combs([],[]).

combs([_|T],T2) :-
    combs(T,T2).
combs([H|T],[H|T2]) :-
    combs(T,T2).

在这种情况下,结果将是:

?- combs([a,b,c],L).
L = [] ;
L = [c] ;
L = [b] ;
L = [b, c] ;
L = [a] ;
L = [a, c] ;
L = [a, b] ;
L = [a, b, c].

EDIT

如果您想排除空列表,您可以通过在调用中添加另一个检查来简单地完成此操作:

?- combs([a,b,c],L),L \= [].

您可以在函数中定义它,例如:

combs_without_empty1(LA,LB) :-
    combs_without_empty1(LA,LB),
    LB \= [].

或者通过重写comb/2功能。在这种情况下,你最好使用累加器计算当前选定元素的数量:

combs_without_empty(L,C) :-
    combs_without_empty(L,0,C).

The combs_without_empty/3有点复杂。如果列表仅包含一个元素,则应检查是否N大于零。如果是这种情况,我们可以选择是否添加该元素。如果N为零,我们必须将其包括在内。所以:

combs_without_empty([A],_,[A]).
combs_without_empty([_],N,[]) :-
    N > 0.

我们还必须实现一个递归部分,该部分将递增N假设我们选择一个元素:

combs_without_empty([_|T],N,T2) :-
    combs_without_empty(T,N,T2).
combs_without_empty([H|T],N,[H|T2]) :-
    N1 is N+1,
    combs_without_empty(T,N1,T2).

把它们放在一起给出:

combs_without_empty(L,C) :-
    combs_without_empty(L,0,C).

combs_without_empty([A],_,[A]).
combs_without_empty([_],N,[]) :-
    N > 0.

combs_without_empty([_|T],N,T2) :-
    combs_without_empty(T,N,T2).
combs_without_empty([H|T],N,[H|T2]) :-
    N1 is N+1,
    combs_without_empty(T,N1,T2).

其产生:

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

Prolog 中不带双精度的列表的所有组合 的相关文章

  • 列表清除是否删除先前包含的对象

    想象我有 List
  • Java 按日期作为字符串对列表 进行排序

    我有一个类型列表 我想按日期元素对该列表进行排序 我用谷歌搜索 看到了一些具有可比性的解决方案 但是是否有可能在不实现类中接口的情况下做到这一点 我的列表如下所示 列表 id 33 文本 test1 日期 06 02 15 id 81 文本
  • List.Except 不起作用

    我尝试减去 2 个列表 如下代码所示 assignUsers已获得 3 条记录assignedUsers有 2 行 后Except方法我仍然得到 3 行 尽管我应该得到 1 条记录 因为 2 行assignedUsers类似于assignU
  • Prolog 罗马数字(属性语法)

    我正在做一项作业prolog questions tagged prolog扫描数字列表并应返回该列表是否是有效的罗马数字以及数字的十进制值 前任 1 roman N I N 1 true 2 当我运行我认为应该工作的程序时 十进制值总是正
  • Python 用 lambda 函数封闭作用域变量

    我写了这个简单的代码 def makelist L for i in range 5 L append lambda x i x return L 好的 现在我打电话 mylist makelist 因为稍后调用嵌套函数时会查找封闭范围变量
  • 适合从记录中提取 OneToMany 关系的约束编程

    也许有人可以帮助我解决 Prolog 或任何约束编程语言的问题 想象一个项目表 学生与母亲一起做某事的学校项目 每个项目都有一名或多名儿童参与 对于每个孩子 我们存储其姓名及其母亲的姓名 但对于每个项目 只有一个包含所有母亲的单元和一个包含
  • 如何在 Haskell 中获得列表的中间位置?

    我刚刚开始使用 Haskel 学习函数式编程 我正在慢慢度过Erik Meijer 在 Channel 9 的讲座 http channel9 msdn com shows Going Deep Lecture Series Erik Me
  • 如何创建仅包含某些可扩展项目的列表?

    我正在尝试编写一个包含一些可扩展项目和一些单个项目的列表 我希望拥有它 以便当单击单个项目或可扩展列表子项时 我可以根据该项目的文本调用意图 我认为可扩展列表可以工作 但是有没有办法在可扩展列表中设置项目 以便它们没有可扩展列表图标 我应该
  • Python - 在和不在列表中语法错误

    我正在尝试从另一个现有的浮点数列表构建一个新的浮点数列表 通过示例更容易识别第一个列表的预期内容 price list 39 99 74 99 24 99 49 99 预期的后期功能 print new price list gt gt 2
  • Python 字符串到 SQL IN 参数的列表

    我在 python 中有这个查询 ssim group S1200 S1300 query select WIPMessageCnt from waferdata where recipename in s and equipment an
  • Pandas DataFrame 中多列的映射方法

    我有一个 Pandas 数据框 其中的值是列表 import pandas as pd DF pd DataFrame X 1 5 1 2 Y 1 2 5 1 3 5 DF X Y 0 1 5 1 2 5 1 1 2 1 3 5 我想检查
  • 在 Django 中为多个查询编写视图的最佳方法?

    这是一个简单的问题 我已经组织了我的模型 以便提供给页面的大多数对象都属于一种类型 项目 该模型包含各种属性 可以帮助我以不同的方式提供服务 我有文章和视频 它们由模型上的 类型 字段确定 类型 文章 等 我有一个列表视图 它显示项目模型中
  • 有没有办法查看 OSGi 应用程序中注册的服务?

    我有一个运行 Equinox 的 OSGi 应用程序 我想查看该应用程序提供的服务 我怎样才能做到这一点 从 gogo shell 类型 inspect cap service 这将显示所有捆绑包注册的所有服务 如果您想显示特定捆绑包的服务
  • 在Python中将整数附加到列表的开头[重复]

    这个问题在这里已经有答案了 如何在列表的开头添加一个整数 1 2 3 42 1 2 3 gt gt gt x 42 gt gt gt xs 1 2 3 gt gt gt xs insert 0 x gt gt gt xs 42 1 2 3
  • Java:如何实现3和?

    我正在研究 3 Sum 来自己实现它 并遇到了以下规则的实现 给定一个由 n 个整数组成的数组 S S 中是否存在满足 a b c 0 的元素 a b c 查找数组中所有总和为零的唯一三元组 注意 三元组 a b c 中的元素必须按非降序排
  • 如何按字段对列表进行排序

    美好的一天 4 你们大家 我有一个对象列表 我的对象喜欢 Product iPhone Category SmartPhone Product HP Category PC Product HTC Category SmartPhone 我
  • python 中的基本矩阵转置

    我尝试了 python 中矩阵转置的最基本方法 但是 我没有得到所需的结果 接下来是代码 A 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 print A def TS A B A for i in range len A
  • 是否有一个 jquery List 插件可以自动排序项目并具有强大的添加/删除方法?

    我已经在谷歌上搜索了几个小时 寻找一些东西来处理我的情况 我还不够熟练 无法编写自己的 jquery 插件 该插件应该自动对列表进行排序 这并不像能够轻松地从列表中添加 删除项目那么重要 Themeroller 功能将是一个优点 我基本上会
  • 根据 Mathematica 中的另一个列表值拆分列表

    在 Mathematica 中我有一个点坐标列表 size 50 points Table RandomInteger 0 size RandomInteger 0 size i 1 n 以及这些点所属的聚类索引列表 clusterIndi
  • 将不同类型的对象与可比较的对象进行比较

    A java public class A implements Comparable private String id private String name public A String a String b id a name b

随机推荐

  • 在 Webpack 中加载静态 JSON 文件

    我的代码中有以下构造 var getMenu function return window fetch portal content json menu json then function data return data json 我尝
  • python pack 4字节整数,字节数组位于bytearray struct.pack中

    我正在尝试使用 struct pack 将 python bytearray 的内容打包为 4byte 有符号整数 不幸的是 pack 想要一个字符串 所以经过一番谷歌搜索后 我认为我需要将字节数组解码为字符串 我认为 ascii 的意思是
  • 通过 API GW 调用时,AWS Lambda Go 函数未获取请求正文

    首先 有人可能会说这个问题非常类似于HTTP 请求正文无法通过 AWS API Gateway 访问 AWS lambda 函数 https stackoverflow com questions 41059440 http request
  • 集合removeAll忽略大小写?

    好的 这是我的问题 我必须HashSet的 我用的是removeAll方法从一组中删除存在于另一组中的值 在调用该方法之前 我显然将这些值添加到Sets 我打电话 toUpperCase 在各个String在添加之前 因为两个列表中的值的情
  • 显示菜单使光标消失

    单击时光标消失 如下所示 如何重现 获取 Game Jam 菜单模板 https www assetstore unity3d com en content 40465 https www assetstore unity3d com en
  • 如何完全反汇编Python源代码

    我一直在玩dis库来反汇编一些Python源代码 但我发现这不会递归到函数或类中 import dis source py test py with open source py as f source source code f sour
  • 打开工作表时自动执行的宏

    我的宏 update 是否有可能在每次打开 Excel 文件时自动执行 下面的代码不能很好地工作 谢谢 Private Sub Workbook Open Run update End Sub Option Explicit Sub upd
  • Google Sheets 调试无休止的计算和缓慢的加载时间(Chrome 开发工具)

    使用 Google 表格 随着时间的推移 它的复杂性和大小都在增长 现在正在无休止地计算 而且打开速度非常慢 该工作表包含大量数据 公式和导入范围 我已阅读有关如何加快工作表速度的最佳实践link https www benlcollins
  • 将 Fogbugz 与 TortoiseSVN 集成,无需 URL/Subversion 后端

    我已经安装了 TotroiseSVN 并且大部分存储库都从 C subversion 签入和签出以及一些从网络共享签入和签出的情况 当我最初发布这个问题时我忘记了这一点 这意味着我本身没有 颠覆 服务器 如何集成 TortoiseSVN 和
  • 为什么我收到错误“该类型的方法未定义”?

    我正在大学学习基础知识 希望获得有关 Eclipse 中以下错误的帮助 The method getCost is undefined for the type ShopCLI Exception in thread main java l
  • 在 Objective-C 中以编程方式计算 IRR(内部利率回报)和 NPV

    我正在开发一个金融应用程序并需要IRR in built functionality of Excel 计算并发现了如此好的教程C here http www codeproject com Tips 461049 Internal Rat
  • WPF 分隔符位置

    我正在使用分隔符在边框内绘制一条垂直线 起初这没问题 因为线条需要居中 但现在我需要将其定位在距左边框的自定义 x 位置 有没有办法做到这一点
  • 如何在 PyPI 中包含非 .py 文件?

    我是 PyPI 的新手 所以让我符合这一点 我试图在 PyPI 上放置一个包 但当我尝试使用 pip 安装它时遇到了一些麻烦 当我将文件上传到 PyPI 时 我收到一条警告 但 setup py 脚本完成时没有出现致命错误和 200 状态
  • 在 HLSL 中绘制超级椭圆

    更新 关于如何使用超级公式绘制一个的答案在最后 I need to draw a rounded rectangle such as this one using a SuperEllipse http en wikipedia org w
  • 如何在 chrome 扩展的选项页面和背景页面之间进行通信

    我面临一个问题 通过消息传递 我将 DOM 数据从内容脚本传输到后台页面 我想知道的是如何在选项页面和后台页面之间建立通信通道 应用程序编程接口chrome extension getBackgroundPage 没有用 传统的消息传递也不
  • Windows批处理脚本获取当前驱动器名称

    我有一个批处理文件 位于 USB 密钥上 我需要知道批次所在的驱动器名称 例如 如果它是 E mybatch bat 则打开时应该找到 E 与 F G 等相同的内容 我怎样才能在批处理脚本中做到这一点 视窗 CD 这就是您正在寻找的 它打印
  • Azure Redis 缓存 - GET 调用超时

    我们在 Azure 中有多个 Web 和辅助角色通过 StackExchange Redis 库连接到我们的 Azure Redis 缓存 并且我们经常收到超时 这使得我们的端到端解决方案陷入停滞 其中之一的示例如下 System Time
  • Flutter WebView 位置

    我正在创建该网站的 WebViewhttps nearxt com https nearxt com 它在打开时询问位置 但是当我使用此链接在 flutter 中创建 webview 时 那么它就无法定位 我还在应用程序中定义了位置 但 w
  • 如何在 CSV 文件中写入多行?

    我怎样才能创建一个 csv文件 在这个 csv我想写数据包的信息 这是我的代码 https www tcpdump org sniffex c https www tcpdump org sniffex c我想写入我的文件 csv一些印刷品
  • Prolog 中不带双精度的列表的所有组合

    有没有一种简单的方法可以获取列表的所有组合而无需双精度 没有双打我的意思是也没有彼此的排列 所以不行 a b c and c a b or c b a 因此对于输入 a b c 输出将是 a b c a b a c b c a b c 我只