Отсортировать базу данных методом слияния - Prolog
Формулировка задачи:
Работаю в SWI-Prolog.
Реализовал всё, кроме сортировки.
Необходимо упорядочить список объектов досуга по количеству мест с помощью сортировки слиянием.
Поискав, понял, что нужно сначала БД засунуть в список, затем производить манипуляции с ним.
findall(Amount, acc(_,_,_,_,_,Amount,_), Object_list),
Но тут в список помещается лишь 1 параметр записи. Как засунуть всё? И как отсортировать базу?
Решение задачи: «Отсортировать базу данных методом слияния»
textual
Листинг программы
% помещаем в список поле, по которому будем сортировать базу
findall(LastName, acc(_, _, LastName, _,), Object_list),
% сортируем этот список любым из методов
sorting(Object_list, Sorted_list),
% показываем базу с помощью этого списка в отсортированном виде
show_sorted(Sorted).
%********show_sorted********
show_sorted([]).
show_sorted([H|T]) :- acc(Number, Name, H, Age),
write(Number), write(' '),
write(H), write(' '),
write(LastName), write(' '),
write(Age), nl,
show_sorted(T).
Объяснение кода листинга программы
- Сначала мы объявляем список, который будем сортировать, используя поле
LastName. - Затем мы сортируем этот список любым из методов.
- После сортировки мы выводим отсортированный список с помощью функции
show_sorted. - Функция
show_sortedсначала проверяет, пуст ли список. Если это так, она завершает свою работу. - Если список не пуст, она извлекает первый элемент и записывает его в переменную
H. - Затем она записывает номер, имя, фамилию и возраст этого элемента.
- Наконец, она рекурсивно вызывает себя для оставшейся части списка.