def main():
    """Handle the argument list"""
    if len(sys.argv) != 2:
        print("Fail! Supply filename")
    l = getlist(sys.argv[1])
    sl = mergesort(l)
    print(sl)

def tail_mergesort(l):
    """Split list in half and recurse"""
    if len(l) <= 1:
        return l
    split = len(l)/2
    return merge(mergesort(l[:split]), mergesort(l[split:]))

mergesort = tail_rec(tail_mergesort)

def tail_merge(x,y):
    """Merge two lists together"""
    if not x:
        return y
    if not y:
        return x
    if x[0] <= y[0]:
        return [x[0]] + merge(x[1:], y)
    else:
        return [y[0]] + merge(x, y[1:])

merge = tail_rec(tail_merge)

if __name__=="__main__":