如何在Prolog中不使用append实现3个列表的拼接
Prolog无append实现三列表拼接方法
核心思路
你已经实现的双列表无append拼接逻辑可以直接复用,三列表拼接等价于先拼前两个列表得到临时列表,再将临时列表和第三个列表拼接,全程不调用系统自带的append谓词即可。
实现方式1:复用自定义双列表拼接逻辑
首先你已经掌握的自定义双列表拼接谓词参考(无系统append依赖):
% 自定义双列表拼接:将L1和L2拼接为Result append_two([], L, L). append_two([H|T], L, [H|Result]) :- append_two(T, L, Result).
基于上述谓词实现三列表拼接:
% 三列表拼接:将L1、L2、L3按顺序拼接为Result append_three(L1, L2, L3, Result) :- append_two(L1, L2, TempList), append_two(TempList, L3, Result).
测试示例
查询:?- append_three([1,2], [3,4], [5,6], R).
返回结果:R = [1,2,3,4,5,6]
实现方式2:直接递归实现(无需单独定义双拼接谓词)
如果不想额外封装双列表拼接逻辑,可以直接把递归逻辑整合到三列表拼接谓词中:
% 递归终止条件1:第一个列表为空,开始拼接第二个列表 append_three([], [H2|T2], L3, [H2|R]) :- append_three([], T2, L3, R). % 递归终止条件2:前两个列表都为空,结果直接等于第三个列表 append_three([], [], L3, L3). % 递归过程:逐个取出第一个列表的元素放到结果头部 append_three([H1|T1], L2, L3, [H1|R]) :- append_three(T1, L2, L3, R).
这种实现全程没有调用任何形式的append,完全靠递归完成三列表拼接逻辑。
内容的提问来源于stack exchange,提问作者CsStudent
相关产品推荐
相关产品推荐

