prolog - 将列表列表合并为单个列表
问题描述
请遵循输入/输出要求:
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).
当我运行它时,它会永远循环。任何想法我做错了什么?
解决方案
看看这是否有效:
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。因此,此解决方案仅在每个子列表包含至少一个字符时才有效。
推荐阅读
- r - 如何计算字符“x”在“ID”列中报告的次数,并报告每行的重量度量?
- javascript - 如何调整我的翻转时钟代码以在多个实例上运行?
- flutter - 在 Flutter 中显示 Snackbar 时向上移动底部对齐的小部件
- python - pos_label=1 不是有效标签
- python - 为什么变量有效,但在 python 中使用 xlrd 打开工作簿的列表无效?
- javascript - 返回 1 或 -1 如何在 array.sort (a>b) (JS) 中工作/表示?询问methos array.sort的过程
- azure - 如何以编程方式重新启动 Azure 应用服务实例?
- javascript - 嵌套在 each() 中的函数应用于所有元素而不是单个元素
- javascript - 复制选择但小写
- python - 拟合 B 样条“围绕”点