2 个列表的交集和并集

2023-11-21

我正在开始学习 prolog(我使用 SWI-prolog),我做了一个简单的练习,其中我有 2 个列表,我想计算它们的交集和并集。 这是我的代码,效果很好,但我问自己是否有更好的方法,因为我不喜欢使用剪切操作员.

intersectionTR(_, [], []).
intersectionTR([], _, []).
intersectionTR([H1|T1], L2, [H1|L]):-
    member(H1, L2),
    intersectionTR(T1, L2, L), !.
intersectionTR([_|T1], L2, L):-
    intersectionTR(T1, L2, L).

intersection(L1, L2):-
    intersectionTR(L1, L2, L),
    write(L).


unionTR([], [], []).
unionTR([], [H2|T2], [H2|L]):-
    intersectionTR(T2, L, Res),
    Res = [],
    unionTR([], T2, L),
    !.
unionTR([], [_|T2], L):-
    unionTR([], T2, L),
    !.

unionTR([H1|T1], L2, L):-
    intersectionTR([H1], L, Res),
    Res \= [],
    unionTR(T1, L2, L).
unionTR([H1|T1], L2, [H1|L]):-
    unionTR(T1, L2, L).

union(L1, L2):-
    unionTR(L1, L2, L),
    write(L).

请记住,我只想得到 1 个结果,而不是多个结果(即使正确),因此运行代码如下:

?- intersect([1,3,5,2,4] ,[6,1,2]).

应该退出:

[1,2]
true.

并且不与

[1,2]
true ;
[1,2]
true ;
etc...

这对于联合谓词也必须有效。
正如我所说,我的代码运行得很好,但请建议更好的方法。
Thanks


另外,不知道为什么你坚决反对削减,只要它们的删除不会改变代码的声明性含义,根据你的链接。例如:

inter([], _, []).

inter([H1|T1], L2, [H1|Res]) :-
    member(H1, L2),
    inter(T1, L2, Res).

inter([_|T1], L2, Res) :-
    inter(T1, L2, Res).

test(X):-
        inter([1,3,5,2,4], [6,1,2], X), !.

test(X).
X = [1, 2].

在我调用代码的测试位中,我只是说进行交集,但我只对第一个答案感兴趣。谓词定义本身没有删减。

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

2 个列表的交集和并集 的相关文章

  • 我应该使用 Python 双端队列还是列表作为堆栈? [复制]

    这个问题在这里已经有答案了 我想要一个可以用作堆栈的 Python 对象 使用双端队列还是列表更好 元素数量较少还是数量较多有什么区别 您的情况可能会根据您的应用程序和具体用例而有所不同 但在一般情况下 列表非常适合堆栈 append is
  • Haskell:从后面访问列表

    今天我开始学习Haskell 我对函数式语言有点陌生 而且我非常喜欢 Haskell 然而 我有一个关于它的设计的问题困扰着我 从我到目前为止的理解来看 访问列表后面的元素似乎比访问前面的元素要复杂得多 类似于xs x where xs a
  • jQuery UI:将可排序从手风琴内部拖动到外部

    我有两个相连的可排序列表 一个只是在页面上 另一个在手风琴内 我使用手风琴作为其他列表的容器 我的目标是用户可以打开手风琴并将项目从该列表中拉到页面上 它有效 除了占位符在离开手风琴时消失 我尝试过 helper clone 并增加 zIn
  • 字典中的列表,Python 中的循环

    我有以下代码 TYPES hotmail type hotmail lookup mixed dkim no signatures S Return Path email protected cdn cgi l email protecti
  • 如何检查列表是否为空?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 例如 如果通过以下内容 a 我如何检查是否a是空的 if not a print Lis
  • Python:按数字对列表进行排序

    我有一个清单x y我需要根据坐标进行排序x坐标 则y协调时x是相同的并消除相同坐标的重复项 例如 如果列表是 450 0 486 6 500 0 400 0 450 0 313 3 350 0 313 3 300 0 400 0 349 9
  • 带箭头的样式项目符号列表

    我创建了一个箭头 我想将其附加到列表而不是圆形项目符号点 我尝试过使用 after 但还没有成功 不得不承认我对伪元素非常陌生 这是我到目前为止得到的 arrow border right 2px solid black border bo
  • 在嵌套列表中查找索引位置以进行匹配

    我想找到嵌套列表和目标值 11 的匹配索引 Data f lt list list 1 2 3 list 4 5 list 8 list 11 12 目标值 11 的所需输出 c 2 3 2 1 Printed f 1 1 1 1 1 1
  • Python 在列表列表中查找值

    最近我必须找到某个列表中的某些内容 我使用了 def findPoint haystack needle haystack 1 2 3 4 5 6 7 8 9 for x in range len haystack if needle in
  • Prolog 中的子集

    我正在寻找一个像这样工作的谓词 subset 1 2 3 X X X 1 X 2 X 3 X 1 2 X 1 2 3 X 2 3 我见过一些subset实现 但当您想要检查一个列表是否是另一个列表的子集时 而不是当您想要生成子集时 它们都会
  • 用另一个列表替换列表的扩展切片

    我有一个清单s如下所示 s list range 1 11 我正在更换slice of s 使用下面的代码 s 1 4 0 0 0 0 print s Output 1 0 0 0 0 5 6 7 8 9 10 但是 当尝试分配相同的列表时
  • 尝试在 Prolog 中实现交换律

    我正在尝试创建一个知识库 我的问题有terminal 1 and connected 2我定义了以下规则 connected X Y connected Y X 由于我现在明白的原因 我认为 这进入了无限递归 然后 我尝试搜索SO并发现了这
  • python pandas:作为 DataFrame 的各个值的整数列表

    问题 如何 pd read csv 以便给定列中的值是类型列表 一个列表在一列的每一行中 创建 DataFrame 时 从字典 见下文 各个值的类型为列表 问题 将 DataFrame 写入文件并从文件读回 DataFrame 后 我得到一
  • 元组/数组列表对

    我本质上是想创建一个配对列表 事实证明这是非常困难的 请注意 在任何人提到哈希表之前 都会有我不关心的重复项 例如 如果我这样做 b dog cat I get Name Value dog cat 这很好 但是 我无法添加类似的内容 b
  • 比较列表的相应元素

    我正在尝试对两个列表进行简单的比较 如何比较列表 A 中的一个元素与列表 B 中的相应元素 假设我有 2 个列表 A 100 100 100 B 100 120 95 我想比较列表 A 和 B A 1 与 B 1 A 2 与 B 2 等等
  • 列出树中叶子的路径

    我正在尝试编写一个函数来查找树中叶子的所有路径 例如 给定一棵如下所示的树 1 2 5 3 4 6 输出列表将是 1 2 3 1 2 4 1 5 6 该函数的类型签名是 branches Tree a gt a 请注意 这使用了中定义的 T
  • 如何循环遍历列表中除最后一项之外的所有项? [复制]

    这个问题在这里已经有答案了 Using a for循环 如何循环遍历列表中除最后一项之外的所有项 我想遍历一个列表 检查每个项目与后面的项目 我可以在不使用索引的情况下做到这一点吗 for x in y 1 If y是一个生成器 那么上面的
  • 交换方案中列表中的两个元素[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么这个“[::-1]”在Python中返回一个反向列表? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 切片表示法的良好入门指南 https stackoverflow com questions 509211 good primer for python slice notation P
  • 我可以使用对象(类的实例)作为 Python 中的字典键吗?

    我想使用类实例作为字典键 例如 classinstance class dictionary classinstance hello world Python似乎无法将类作为字典键处理 还是我错了 另外 我可以使用像 classinstan

随机推荐

  • 如何创建由多次重复的相同字符组成的长度字符串? [复制]

    这个问题在这里已经有答案了 如果我想要一个String s其中包括n字符实例A 这可以在 Java 中更干净地完成吗 public static String stringOfSize int size char ch StringBuil
  • api.jar + impl.jar + bundle.jar 的用途是什么?

    我看到许多Java包都有api impl和bundle jar name api jar name impl jar name bundle jar 有人能解释一下这些是什么意思吗 应用程序需要全部三个吗 这个想法是你可以分离应用程序的依赖
  • 具有变量和多个值的 jQuery .css() 函数

    奇怪的小混乱 我正在使用 jQuery css 使用变量更改文本大小的方法 长话短说 不 我不能使用媒体查询 我需要添加em到它 我不确定语法是什么 因为 CSS 更改有多个值 为了显示 这非常有效 它添加了em到计算值victore h1
  • 使用 CSS 将背景图像设置在列表中的背景颜色之上

    这是代码 ul li class test a href h2 Blah h2 p Blah Blah Blah p a li ul 基本上 我的列表已经有一些样式 例如 我为其设置了背景颜色 现在在 测试 类中 我还设置了背景图像 我的问
  • 在引导程序中使列具有相同的高度

    我在一行中有三列 我希望所有三列具有相同的高度 填充整个空白区域 目前 它看起来像这样 如您所见 左栏是正确的高度 中间和右边没有的地方 它的脚手架看起来像这样 div class container div class row div c
  • 强制 iOS Facebook 应用程序在浏览器中而不是 WebView 中打开提要链接

    在投票 标记之前 请注意已经有类似的问题 但它们都不能使用纯 JavaScript 每当在 iOS 设备上单击 Facebook Feed 上的链接 仅通过 facebook 应用程序 时 它将在 WebView 中打开 而不是在新的浏览器
  • python:我什么时候可以打开生成器的包装? [复制]

    这个问题在这里已经有答案了 它在幕后是如何工作的 我不明白以下错误的原因 gt gt gt def f yield 1 2 yield 3 4 gt gt gt f File
  • 将 SQL CE 4 部署到 IIS 7 - 需要特殊权限吗?

    我有一个使用新 SQL CE 4 CTP 的 ASP NET 4 站点 该站点在本地 Win7 上的 IIS 7 5 运行良好 在 Server 2003 IIS 6 中运行良好 部署到 Server 2008 上的 IIS 7 时失败 我
  • 什么是 |和 << 是什么意思?

    抱歉 如果这是一个常见问题 但我不知道它叫什么 所以我在搜索时遇到了困难 这是如何运作的 view autoresizingMask UIViewAutoresizingFlexibleWidth UIViewAutoresizingFle
  • asp.net web api 2 CORS和身份验证授权配置

    我创建了一个具有个人帐户安全性的 asp net web api 2 服务 我尝试按照以下示例从 AngularJs 中调用它 http www codeproject com Articles 742532 Using Web API I
  • 关于C#中不明确调用的问题

    我有一个问题 虽然不是真正的问题 但让我有点好奇 我有一个类 其中有两种方法 一种是静态方法 另一种是实例方法 这些方法具有相同的名称 public class BlockHeader public static BlockHeader P
  • 使用docker进行谷歌云数据流依赖

    我对使用 Google Cloud Dataflow 并行处理视频感兴趣 我的工作同时使用 OpenCV 和张量流 是否可以只在 docker 实例内运行工作程序 而不是按照所述从源安装所有依赖项 https cloud google co
  • 在 PHP 中将新的键/值对添加到 JSON 中

    我的 MySQL 数据库有一个结果 我用 PHP 进行了 json 编码 结果看起来像 id 8488 name Tenby area Area1 id 8489 name Harbour area Area1 id 8490 name M
  • 如何将库添加到 Xamarin 参考列表

    是否有地方可以放置库 dll 以便它们显示在要选择的项目的引用列表中 我知道我可以从我的个人库中手动添加它们 但是我希望能够将它们添加到可用列表中 因此我所需要做的就是选择它们 我认为会有某种方式来表明它们适用于哪个平台 在 编辑引用 下
  • CefSharp - 获取 HTML 元素的值

    如何使用 CefSharp 获取 HTML 元素的值 我知道如何使用这个默认的 WebBrowser 控件 Dim Elem As HtmlElement WebBrowser1 Document GetElementByID id 但我没
  • 使用 gradle 构建库项目时 BuildConfig.DEBUG 始终为 false

    当我在调试模式下运行应用程序时 BuildConfig DEBUG 不起作用 逻辑上设置为 false 我使用 Gradle 来构建 我有一个图书馆项目 我在其中进行此检查 BuildConfig java 在构建调试文件夹中看起来像这样
  • App Store 下载 dSYM 中缺少 UUID dSYM(更多目标应用程序)

    我在使用 iOS 应用程序 XCode 10 3 时遇到以下问题 Crashlytics 说我缺少 dSYM 并提供了缺少的 dSYM UUID 我缺少必需的和可选的 UUID 该应用程序是BitCode应用程序 dSYM是从AppStor
  • Dygraphs 中的散点图?

    如何使用 dygraphs 绘制散点图 数据如下所示 X 轴可能有 5 20 个值 类别 Y 值可能是 x 轴上每个值 1 10 个值 这是我需要的一个例子 这在 Dygraphs 中可能吗 谢谢 迈克尔 您可以设置 strokeWidth
  • 如何在React js中读取xml文件(data.xml)?

    我尝试读取 xml 文件并解析它react xml parser图书馆 var XMLParser require react xml parser var xml new XMLParser parseFromString xml str
  • 2 个列表的交集和并集

    我正在开始学习 prolog 我使用 SWI prolog 我做了一个简单的练习 其中我有 2 个列表 我想计算它们的交集和并集 这是我的代码 效果很好 但我问自己是否有更好的方法 因为我不喜欢使用剪切操作员 intersectionTR