From 802b2fdfe8040d99e2fe1dc27b905fd1c1764c6b Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 7 Feb 2021 08:45:22 -0800 Subject: multi-sort: bug: always return list of lists. * lib.c (multi_sort): If any of the input lists is empty, then there is an empty list of tuples to sort, producing a an empty list that doesn't transpose back to a list of empty lists. We code this as a special case. --- lib.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/lib.c b/lib.c index ab60ebeb..1abd6b83 100644 --- a/lib.c +++ b/lib.c @@ -9745,15 +9745,22 @@ val multi_sort(val lists, val funcs, val key_funcs) { val tuples = mapcarl(list_f, nullify(lists)); - key_funcs = default_null_arg(key_funcs); + if (tuples) { + key_funcs = default_null_arg(key_funcs); - if (functionp(funcs)) - funcs = cons(funcs, nil); + if (functionp(funcs)) + funcs = cons(funcs, nil); - tuples = sort_list(tuples, func_f2(cons(funcs, key_funcs), - multi_sort_less), identity_f); + tuples = sort_list(tuples, func_f2(cons(funcs, key_funcs), + multi_sort_less), identity_f); - return mapcarl(list_f, tuples); + return mapcarl(list_f, tuples); + } else { + list_collect_decl (out, ptail); + for (; !endp(lists); lists = us_cdr(lists)) + ptail = list_collect(ptail, nil); + return out; + } } val sort_group(val seq, val keyfun, val lessfun) -- cgit v1.2.3