#include "List.h" List mergeSort(List); /* prototype */ List splitAndMerge(List inL, List half1, List half2) /* NB. half1 and half2 are `accumulating' parameters, -- L.Allison */ { if( inL == NULL ) return merge(mergeSort(half1), mergeSort(half2)); /*else, split inL */ return splitAndMerge(inL->tl, half2, cons(inL->hd, half1)); }/*splitAnd...*/ List mergeSort(List L) { if( L==NULL ) return NULL; /* L==[] */ /*else*/if( L->tl == NULL ) return L; /* L==[E] */ /*else*/return splitAndMerge(L, NULL, NULL); /* L==[E1,E2, ...] */ } /* Merge Sort a List */