Prolog 将列表列表展平为单个列表
尝试通过以下修改将列表列表展平为单个列表。最低级别的列表应该合并到结果列表的一个项目中,并且应该在它们之间添加破折号。您可以从以下内容中看到更多信息:Prolog 将列表列表展平为单个列表,prolog,Prolog,尝试通过以下修改将列表列表展平为单个列表。最低级别的列表应该合并到结果列表的一个项目中,并且应该在它们之间添加破折号。您可以从以下内容中看到更多信息: Input: L = [[[A],[B]],[[C],[D]],[[E],[F]],[[G],[H]]] Expected output: Res = [A-B,C-D,E-F,G-H] 这是我的密码: toList([],_). toList([H|T],Out) :- toList1(H,Out1), newOut2 =
Input:
L = [[[A],[B]],[[C],[D]],[[E],[F]],[[G],[H]]]
Expected output:
Res = [A-B,C-D,E-F,G-H]
这是我的密码:
toList([],_).
toList([H|T],Out) :-
toList1(H,Out1),
newOut2 = [Out|Out1],
toList(T,newOut2).
toList1([],newOut1).
toList1([[A],[B]],Out1) :-
newOut1 = [A-B],
toList1([],newOut1).
应该像
toList([[[A]、[B]、[[C]、[D]、[[E]、[F]、[[G]、[H]]、Res)一样工作实际上,你可以用一个谓词来描述这种关系,我们称之为列表对/2
。有两种情况需要涵盖:
如果列表列表为空,则成对列表也为空
如果第一个列表的头是[[A],[B]
格式,那么第二个列表的头是A-B
,并且列表的尾部也必须保持这种关系
您可以在序言中这样表达:
lists_pairs([],[]). % case 1
lists_pairs([[[A],[B]]|Ls],[A-B|Ps]) :- % case 2
lists_pairs(Ls,Ps).
您的示例查询将生成所需的答案:
?- lists_pairs([[[A],[B]],[[C],[D]],[[E],[F]],[[G],[H]]], Res).
Res = [A-B, C-D, E-F, G-H].
您还可以在另一个方向上使用此谓词:
?- lists_pairs(L, [A-B, C-D, E-F]).
L = [[[A], [B]], [[C], [D]], [[E], [F]]].
最通用的查询也可以使用:
?- lists_pairs(L, P).
L = P, P = [] ;
L = [[[_G22], [_G28]]],
P = [_G22-_G28] ;
L = [[[_G22], [_G28]], [[_G43], [_G49]]],
P = [_G22-_G28, _G43-_G49] ;
L = [[[_G22], [_G28]], [[_G43], [_G49]], [[_G64], [_G70]]],
P = [_G22-_G28, _G43-_G49, _G64-_G70] ;
.
.
.
实际上,您可以用一个谓词来描述这种关系,我们称之为列表\u对/2
。有两种情况需要涵盖:
如果列表列表为空,则成对列表也为空
如果第一个列表的头是[[A],[B]
格式,那么第二个列表的头是A-B
,并且列表的尾部也必须保持这种关系
您可以在序言中这样表达:
lists_pairs([],[]). % case 1
lists_pairs([[[A],[B]]|Ls],[A-B|Ps]) :- % case 2
lists_pairs(Ls,Ps).
您的示例查询将生成所需的答案:
?- lists_pairs([[[A],[B]],[[C],[D]],[[E],[F]],[[G],[H]]], Res).
Res = [A-B, C-D, E-F, G-H].
您还可以在另一个方向上使用此谓词:
?- lists_pairs(L, [A-B, C-D, E-F]).
L = [[[A], [B]], [[C], [D]], [[E], [F]]].
最通用的查询也可以使用:
?- lists_pairs(L, P).
L = P, P = [] ;
L = [[[_G22], [_G28]]],
P = [_G22-_G28] ;
L = [[[_G22], [_G28]], [[_G43], [_G49]]],
P = [_G22-_G28, _G43-_G49] ;
L = [[[_G22], [_G28]], [[_G43], [_G49]], [[_G64], [_G70]]],
P = [_G22-_G28, _G43-_G49, _G64-_G70] ;
.
.
.