Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 将列表列表展平为单个列表_Prolog - Fatal编程技术网

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] ;
    .
    .
    .