Download code
From LiteratePrograms
Back to Merge_sort_(Prolog)
Download for Windows: single file, zip
Download for UNIX: single file, zip, tar.gz, tar.bz2
mergesort.pl
1 mergesort([], []). 2 mergesort([A], [A]). 3 4 mergesort([A, B | Rest], S) :- 5 divide([A, B | Rest], L1, L2), 6 mergesort(L1, S1), 7 mergesort(L2, S2), 8 my_merge(S1, S2, S). 9 10 divide([], [], []). 11 divide([A], [A], []). 12 13 divide([A, B | R], [A | Ra], [B | Rb]) :- divide(R, Ra, Rb). 14 15 my_merge(A, [], A). 16 my_merge([], B, B). 17 18 my_merge([A | Ra], [B | Rb], [A | M]) :- 19 A =< B, 20 my_merge(Ra, [B | Rb], M). 21 my_merge([A | Ra], [B | Rb], [B | M]) :- 22 A > B, 23 my_merge([A | Ra], Rb, M). 24
