2013-05-12 73 views
2

我想编写一个谓词,其中包含2个未排序列表,并生成一个排序列表输出。将两个无序列表合并到序言中的有序列表中

sort_lists(List1, List2, List3) 

例如:

[10,8,2,4,5] 
    [3,7,6,9,11] 

我想这些合并成一个降支排序列表,而无需事先分拣他们两个并做了简单的合并。最终的结果将是:

[11,10,9,8,7,6,5,4,3,2] 

我有一个想法是将数字一次一个到第三列表,每次检查的第一个数字,这是被检查小于当前数量,并插入数在这个位置,但我在努力实现这个..我是很新的Prolog的

+1

合并未分类的列表称为“连接”。 – 2013-05-12 05:48:23

回答

3

你描述的是insertion sort的应用程序:

join(L1,L2,S):- 
    append(L1,L2,[A|B]) -> insert_each(B,[A],S) 
    ; S = []. 

insert_each([],S,S). 
insert_each([A|B],L,S):- 
    insert(A, ... 
    insert....... 

insert(A,[B|C], X):- 
    A > B -> .... 
    ; ........... 

可以填补空白。

+1

谢谢。解决了一些问题后,我得到了解决方案.. – 2013-05-12 10:17:36

+0

@CstackM太棒了,不客气!最好的学习方法是自己解决。 – 2013-05-12 10:50:18

+0

@CstackM很高兴你知道了。如果你可以发布你的解决方案 – joneshf 2013-05-13 21:38:20