如何将元素追加到列表的每个元素? (序言)

时间:2018-12-30 13:33:35

标签: prolog

我想将一个元素附加到列表的每个元素。元素也必须是列表。

示例:

A = [a,b,c]
B = [ele,ele2]

结果将是:

R = [[a,ele,ele2],[b,ele,ele2],[c,ele,ele2]]

我尝试了

 maplist(custom_append,A,B,R).

但是它用

返回false
custom_append(X,Y,[X|Y]).

我该如何实现?

2 个答案:

答案 0 :(得分:1)

请注意,B不是要对其进行迭代的列表,您想将A的元素追加到同一列表B

最简单的方法可能是将custom_append/3中的元素顺序交换为:

custom_append(Y, X, [X|Y]).

然后我们可以使用maplist/3来获得它:

maplist(custom_append(B), A, R).

因此,我们已经做出了与部分应用非常相似的行为:我们传递了函子custom_append(B),然后Prolog将使用custom_append(B, Ai, Ri)进行调用({{1 }}和Ai在这里用来表示列表RiA的元素。

答案 1 :(得分:0)

直接的方法是这样的:

append_list([], _, []).

append_list([A|As], B, [[A|B]|Cs]) :-
    append_list(As, B, Cs).

甚至不需要使用maplist