gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:40:50 25 4
gpt4 key购买 nike

我对 prolog 还很陌生,我正试图弄乱列表列表。我很好奇如何添加两个列表列表或减去它们以生成一个列表列表。如果我有两个列表列表可以说,

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

我如何添加或减去 SomeListSomeList2创建列表列表?结果总和说
sumList([[2,4,6,8],[10,12,14,16]]) 

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

最佳答案

最简单的方法是使用 maplist :

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)电话 GL1 的每个元素上和 L2 ,导致 R 的每个元素.由于 L1 的每个元素和 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照顾你。

关于list - 在序言中减去或添加列表列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38252848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com