将 2 个列表合并成第三个但成对
Merging 2 lists into a third but in pairs
给定 2 个列表,我想将它们合并到第三个列表中,但第三个列表的每个元素都是第一个和第二个列表元素的列表。
例如给定 list1 [1,2,3]
和 list2 [1,2,3]
我希望最终列表是 [[1,1],[2,2],[3,3]]
到目前为止我所做的是
merge([],[],Z).
merge([H1|T1],[T2|T2],Z):-
append([H1],[H2],W),merge(T1,T2,[W,Z]).
但我得到了错误的结果。为什么它不起作用?
您的代码中存在一些缺陷:
- 当前两个列表为空时,结果也必须为空列表;
- 而不是
[T2|T2]
你应该写 [H2|T2]
来代表第二个列表;
- 不需要使用
append([H1],[H2],W)
来创建一个包含两个元素的列表,只需要写[H1,H2]
;
- 因为递归调用必须合并第一个和第二个列表的尾部,所以这个调用的结果不可能是一个以元素
[H1,H2]
. 开头的列表
因此,该谓词的正确定义如下:
my_merge([], [], []).
my_merge([H1|T1], [H2|T2], [[H1,H2]|T3]):-
my_merge(T1, T2, T3).
示例:
?- my_merge([a,b,c], [1,2,3], L3).
L3 = [[a, 1], [b, 2], [c, 3]].
?- my_merge(L1, L2, [[1,a],[2,b],[3,c]]).
L1 = [1, 2, 3],
L2 = [a, b, c].
备注 考虑将对 [H1,H2]
表示为 H1-H2
的可能性,因为后一种表示在 Prolog 中更常用。
给定 2 个列表,我想将它们合并到第三个列表中,但第三个列表的每个元素都是第一个和第二个列表元素的列表。
例如给定 list1 [1,2,3]
和 list2 [1,2,3]
我希望最终列表是 [[1,1],[2,2],[3,3]]
到目前为止我所做的是
merge([],[],Z).
merge([H1|T1],[T2|T2],Z):-
append([H1],[H2],W),merge(T1,T2,[W,Z]).
但我得到了错误的结果。为什么它不起作用?
您的代码中存在一些缺陷:
- 当前两个列表为空时,结果也必须为空列表;
- 而不是
[T2|T2]
你应该写[H2|T2]
来代表第二个列表; - 不需要使用
append([H1],[H2],W)
来创建一个包含两个元素的列表,只需要写[H1,H2]
; - 因为递归调用必须合并第一个和第二个列表的尾部,所以这个调用的结果不可能是一个以元素
[H1,H2]
. 开头的列表
因此,该谓词的正确定义如下:
my_merge([], [], []).
my_merge([H1|T1], [H2|T2], [[H1,H2]|T3]):-
my_merge(T1, T2, T3).
示例:
?- my_merge([a,b,c], [1,2,3], L3).
L3 = [[a, 1], [b, 2], [c, 3]].
?- my_merge(L1, L2, [[1,a],[2,b],[3,c]]).
L1 = [1, 2, 3],
L2 = [a, b, c].
备注 考虑将对 [H1,H2]
表示为 H1-H2
的可能性,因为后一种表示在 Prolog 中更常用。