Mam za zadanie napisać predykat halve/2 używającego list różnicowych w taki sposób, że halve(X-Y, L, R) podstawia pod zmienne L i R listy różnicowe X-Z i Z-Y równej długości.

Zrobiłem to w następujący sposób:

halve(X-Y, X-Z, Z-Y) :- halve_pom(X-Y, X-Y, Z), !.

halve_pom(Z-Y, Y-Y, Z).

halve_pom([_|A]-Y, [_,_|B]-Y, Z) :- halve_pom(A-Y, B-Y, Z).

Na razie działa dla parzystej ilości wyrazów tablicy, dla nieparzystej coś wymyśle i sobie poradzę, ale mam problem z dalszą częścią polecenia, tzn.:

Zaprogramuj następnie algorytm mergesort w postaci predykatu sortującego listy różnicowe mergesort(X-Y, S) gdzie S jest posortowaną listą (zamkniętą). Bardzo prosiłbym tutaj o pomoc.