如何在PROLOG中合并列表?

4
我需要合并两个列表L1=[1,2,3]和L2=[a,b],得到M=[1,a,2,b,3]。请问如何在PROLOG中实现?
3个回答

9
你可以尝试。
m2([A|As], [B|Bs], [A,B|Rs]) :-
    !, m2(As, Bs, Rs).
m2([], Bs, Bs) :- !.
m2(As, [], As).

1
这是(臭名昭著的)剪枝。很久以前,这是控制Prolog执行的唯一方式!它会承诺所做的选择。 - CapelliC

4
merge_list([],L,L ).
merge_list([H|T],L,[H|M]):-
    merge_list(T,L,M).

它会运行。已经测试过100%!

Input: merge_list([1,2],[3,4],M).
Output: M=[1,2,3,4].

1
这不是被要求的内容。 - AndrewB

4
你可以查看这个链接:Prolog程序合并两个有序列表 这将不能给你所需的输出,但它是一个开始。 经过几次尝试,这里是正确的答案,比我最初提出的方案简单得多(已经测试并工作正常)。
mergelist_alternate([],[],[]).
mergelist_alternate([X],[],[X]).
mergelist_alternate([],[Y],[Y]).
mergelist_alternate([X|List1],[Y|List2],[X,Y|List]) :- mergelist_alternate(List1,List2,List).

你可以这样调用它:
mergelist_alternate([1,2,3],[a,b],L),!.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接