首页 > 解决方案 > 将列表列表合并为单个列表

问题描述

请遵循输入/输出要求:

Input:    
[[h,i],[h,e,l,l,o],[l,a,p,t,o,p]]

只是我需要摆脱那些,

Expected output: 
[hi, hello, laptop].

我的代码:

make_LoL([],Res).
make_LoL([H|T],Res) :-  
    atom_con(H,Out),
    newRes = [Out|Res], 
    make_LoL(T,newRes).

atom_con([],Out).
atom_con([H1,H2,H3|T],Out) :-
    atom_concat(H1,H2,Ou),
    atom_concat(Ou,H3,Out),
    atom_con([], Out).

当我运行它时,它会永远循环。任何想法我做错了什么?

标签: prolog

解决方案


看看这是否有效:

string([], []).
string([H | T], [S | Z]) :- helper(H, S), string(T, Z).

helper([A], A).
helper([H | T], S) :- helper(T, Z), atom_concat(H, -, Z1), atom_concat(Z1, Z, S).  

如果子列表为空,则模式匹配将失败并且结果将为 false。因此,此解决方案仅在每个子列表包含至少一个字符时才有效。


推荐阅读