在序言中减去或添加列表的列表?

2024-04-21

我对序言相当陌生,正在尝试摆弄列表列表。我很好奇如何添加两个列表列表或减去它们从而得到一个列表列表。如果我有两个列表,可以说,

SomeList = [[1,2,3,4],[5,6,7,8]]  
SomeList2 = [[1,2,3,4],[5,6,7,8]]

我该如何添加或减去SomeList and SomeList2创建列表的列表?得出总和说

sumList([[2,4,6,8],[10,12,14,16]]) 

或者反之亦然?任何帮助将不胜感激,不是寻找代码,而是寻找洞察力!


最简单的方法是maplist http://www.swi-prolog.org/pldoc/doc_for?object=maplist/4:

add(X, Y, Z) :- Z is X + Y.

op_lists(L1, L2, R) :-
    maplist(maplist(add), L1, L2, R).

这使:

| ?- op_lists([[1,2,3,4],[5,6,7,8]], [[1,2,3,4],[5,6,7,8]], R).

R = [[2,4,6,8],[10,12,14,16]]

yes
| ?-

在表达式中:

maplist(maplist(add), L1, L2, R).

maplist(G, L1, L2, R) calls G的每个元素上L1 and L2,导致每个元素R。由于每个元素L1 and L2是一个列表,那么G在这种情况下是maplist(add)哪个调用add在子列表的每个元素上。

你显然可以修改add(X, Y, Z)可以对每对元素进行任何您想要的操作。您还可以使用 CLP(FD) 使加法更加“相关”:

add(X, Y, Z) :- Z #= X + Y.

然后你还可以得到,例如:

| ?- op_lists([[1,2,3,4],[5,6,7,8]], L, [[3,6,9,12],[10,12,14,16]]).

L = [[2,4,6,8],[5,6,7,8]]

yes
| ?-

如果你想在不这样做的情况下执行此操作maplist,你仍然可以使用add/3并使用两层方法:

op_lists([], [], []).
op_lists([LX|LXs], [LY|LYs], [LR|LRs]) :-
    op_elements(LX, LY, LR),
    op_lists(LXs, LYs, LRs).

op_elements([], [], []).
op_elements([X|Xs], [Y|Ys], [R|Rs]) :-
    add(X, Y, R),
    op_elements(Xs, Ys, Rs).

您可以在这里看到简单的列表处理模式,其中使用maplist为您照顾。

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

在序言中减去或添加列表的列表? 的相关文章

  • SWI-Prolog 与 C++ 接口的问题

    我试图让 SWI Prolog 与 C 很好地配合 现在束手无策 现在 在我开始准确解释我的问题是什么之前 我想首先说明我的项目是关于什么的以及我选择了哪些工具来开发解决方案 我的教授分配给我的任务是开发一个 GUI 程序 作为 SWI p
  • 根据前 2 个元素从嵌套列表中删除重复项

    仅当前两个元素相同时 我才尝试从嵌套列表中删除重复项 而忽略第三个元素 List L el1 el2 value1 el3 el4 value2 el1 el2 value2 el1 el5 value3 将返回 L el3 el4 val
  • 生成字符串及其子字符串列表的排列的算法

    我已经忘记这个算法有一段时间了 假设我得到了字符串 cccaatt 我试图生成重复字母的每个子串的所有可能变体 EG cccaatt 作为输入将返回 猫 卡特 猫 卡特 ccat 卡特 卡特彼勒 卡特彼勒 cccat cccat cccaa
  • 具有固定大小的 Java PriorityQueue

    我正在计算算法的大量可能的结果组合 为了对这些组合进行排序 我用双值对它们进行评级并将它们存储在 PriorityQueue 中 目前 该队列中有大约 200k 个项目 这非常占用内存 实际上 我只需要说出列表中所有项目中最好的 1000
  • 在列表列表中查找共同元素

    我有一个名为 wordlist 的单词列表列表 如下所示 dog cat sheep rabbit kiss time cow pig bomb cat sheep cake boy new 我想找到所有子列表中的共同元素 因此 我期望的上
  • WAM 中的扁平化形式

    WAM 教程重构指出查询 p Z h Z W f W 需要使用以下原则进行扁平化 话虽这么说 查询扁平化形式是 X3 h X2 X5 X4 f X5 X1 p X2 X3 X4 我对外部变量的定义感到困惑 请考虑以下内容 p Z h Y a
  • 将用户定义的函数应用于数据框列表

    我有一系列结构与此类似的数据框 df lt data frame x c notes year 1995 2005 y c NA value 11 21 df2 lt data frame x c notes year 1995 2005
  • 将由空格分隔的整数字符串更改为 int 列表[重复]

    这个问题在这里已经有答案了 我该如何做类似的东西 x 1 2 3 45 87 65 6 8 gt gt gt foo x 1 2 3 45 87 65 6 8 我完全陷入困境 如果我按索引执行此操作 那么超过 1 位数字的数字将被分解 请帮
  • 如何向列表添加值>

    我需要将派生类的元素添加到抽象类的共享指针列表中 我一直在尝试这个 我知道我正在尝试在下面的示例中创建抽象类的实例 但我不知道如何使其工作 简化的类如下所示 using namespace std class Abstract public
  • Python 中两个列表列表的高效比较

    我是 python 的新手 只是在做项目时学习一些东西 这里我有两个列表列表 我需要比较和分离 A gt B 中找到的差异和 b gt A 中找到的差异 最好的比较方法是什么 A 1L test case 1 1L test case 2
  • 查找字典中列表的最大值

    我有一个字典 每个键后面都有一个存储的列表 看起来像这样 dict with values u New York u New York u NY datetime datetime 2014 8 13 0 0 10 u New York u
  • 将其元素添加到另一个列表后清除列表

    我正在做一个程序 它获取更多句子作为参数 我制作了 2 个列表 一个称为 propozitie 其中包含每个句子 另一个称为 propozitii 其中包含所有句子 问题是 当我在遇到 后清除 propozitie 列表时 它也会清除 pr
  • java交叉连接两个列表

    我有一个 ABC 类 其中包含两个整数字段 public class ABC private Integer x private Integer y getters and setters 我有两个列表 xValues 和 yValues
  • 在 Java 8 中使用映射函数时类型转换不起作用

    我正在比较两个列表 List allUserGroups UserBC getAllGroupsForUser userId deptID List
  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 在 HTML 下拉列表中有一个滚动条

    我正在寻找一种在 HTML 的下拉列表中添加滚动条的方法 这样如果下拉列表包含的内容超过例如 5 项 将出现滚动条以查看其余项 这是因为我将被迫列出一些大清单 过去几个小时我一直在谷歌上搜索它 但没有运气 它需要适用于 IE8 FF 和 C
  • Prolog,确定图是否是非循环的

    我需要定义一个谓词 acycling 1 它将一个图作为输入并确定该图是否是非循环的 所以根据我的理解 graph1 a b graph1 b c graph1 c a 将返回 no 和 graph2 a b graph2 b c 将返回是
  • 当我将列表分配给变量时,为什么 Pycharm 会提示我“此列表创建可以重写为列表文字”?

    我是一个Python初学者 有一个难题 当我写这样的代码时 lst 1 2 3 4 Pycharm给我的提示是 这个列表创建可以重写为列表文字 但如果换成 lst list 1 2 3 4 Pycharm什么也没说 谁能告诉我为什么 这段代
  • Python:快速提取大量列表中所有可能的2组合之间的交集

    我有一个大约的数据集 9K 可变长度列表 1 到 100K 元素 我需要计算交集的长度所有可能的 2 列表组合在此数据集中 请注意 每个列表中的元素都是唯一的 因此它们可以在 python 中存储为集合 在 python 中执行此操作最有效
  • 清理 STL 指针列表/向量

    您可以想出的最短的 C 块是多少来安全地清理std vector or std list指针 假设您必须对指针调用删除 list

随机推荐