Вы можете сопоставить их с одним ассоциативным списком, отсортировать и затем отобразить:
associate(X, Y, X-Y).
sort_age_name(Ages, Names, SortedAges, SortedNames) :-
maplist(associate, Ages, Names, AgesNames),
msort(AgesNames, SortedAgesNames),
maplist(associate, SortedAges, SortedNames, SortedAgesNames).
Первый вызов maplist
связывает два списка с одним списком, где каждый элемент равен Age-Name
, возраст со связанным именем. Вы можете думать об этом как об «объединении» двух списков.
Вызов msort
сортирует список возрастных ассоциаций по возрасту.
Второй вызов maplist
связывает два отдельные списки с отсортированным ассоциативным списком. По сути, он «распаковывает» ассоциативный список в списки компонентов.
Поскольку у вас есть такая связь между двумя списками, было бы целесообразно начать с одного ассоциативного списка. Разделяя их более громоздко.