В Прологе сортировка двух списков относительно друг друга - PullRequest
1 голос
/ 26 апреля 2020

Есть ли способ отсортировать два списка относительно друг друга .

Предположим, у меня есть два списка следующим образом:

Age = [14,12,17,15].
Name = ["Frank", "Micheal","Paul","Alex"].

возраст Фрэнка составляет 14 лет, а Алексу 15 лет. Я хочу отсортировать список возраста, а также хочу, чтобы список имен изменил свой порядок относительно списка возраста. Итак, в основном то, что я хочу видеть в результате:

Age = [12, 14, 15, 17]
Name = ["Micheal", "Frank", "Alex", "Paul"].

какие-либо предложения?

1 Ответ

2 голосов
/ 26 апреля 2020

Вы можете сопоставить их с одним ассоциативным списком, отсортировать и затем отобразить:

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 связывает два отдельные списки с отсортированным ассоциативным списком. По сути, он «распаковывает» ассоциативный список в списки компонентов.

Поскольку у вас есть такая связь между двумя списками, было бы целесообразно начать с одного ассоциативного списка. Разделяя их более громоздко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...