2013-04-10 60 views

回答

8

你可以尝试

m2([A|As], [B|Bs], [A,B|Rs]) :- 
    !, m2(As, Bs, Rs). 
m2([], Bs, Bs) :- !. 
m2(As, [], As). 
+0

这工作。如果你能给我几个声望点,我总共有15个,我甚至可以给这个答案+1。 :)但是'!'是什么意思?请问请问? – 2013-04-11 06:27:18

+1

这是(着名)**切**。以前是在一定程度上控制Prolog执行的唯一(!)方法。它承诺所做的选择。 – CapelliC 2013-04-11 12:00:20

3

你可以看看这个链接:Prolog program to merge two ordered lists

这不会给你所需要的输出,但它是一个开始。

经过一番尝试,这里是正确的答案,比我提出的原始(测试和工作)更简单。

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),!. 
+0

这个未经测试的代码不起作用。 – 2013-04-10 13:05:39

+0

代码审查和重写和测试。 – racribeiro 2013-04-11 09:53:59

0
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]. 
+0

这不是被问到的。 – AndrewB 2015-12-23 22:13:40