Быстрая сортировка сложных списков - Prolog

Узнай цену своей работы

Формулировка задачи:

Помогите, пожалуйста, решить задачу сортировки сложных списков, элементы которого списки, структуры или даже структуры списков. Нашел такую тему Сортировка списка списков, но это решение корректное только для списков одинаковой мощности. Фактически вопрос стоит в разработке предиката, сравнивающего списки или структуры и использование его вместо оператора сравнения "<" в предикате быстрой сортировки, который приведён в теме Решенные задачи про списки, строки, файлы, БД
Вопрос в следующем: как используя эти два предиката сравнить два функтора сложной структуры типа (a, [(a,b,c)], [a])? Например, (1,[(1,2,3),(1,2,4)],[1]) больше чем (1,[(1,2,3),(1,3,4)],[1]). Т.е. я так понимаю, это задача обхода в глубину с определением типа, но как к ней подступиться - не понятно. Хотя бы как определить, что эта переменная сопоставлена со списком или структурой и как выбрать соответствующий предикат для сравнения?

Решение задачи: «Быстрая сортировка сложных списков»

textual
Листинг программы
?- sort([[1,2,3],[2,1]],Sorted).
Sorted = [[1, 2, 3], [2, 1]]
?- sort([[3,2,1],[2,1]],Sorted).
Sorted = [[2, 1], [3, 2, 1]]

Объяснение кода листинга программы

  1. sort([[1,2,3],[2,1]],Sorted) - эта строка кода вызывает процедуру сортировки для двух списков.
  2. Sorted = [[1, 2, 3], [2, 1]] - это результат работы процедуры сортировки, который присваивается переменной Sorted.
  3. [[1,2,3],[2,1]] - это список из двух подсписков, которые нужно отсортировать.
  4. [2, 1] - это первый отсортированный подсписк, который становится первым элементом результирующего списка.
  5. [1, 2, 3] - это второй отсортированный подсписк, который становится вторым элементом результирующего списка.
  6. ?- sort([[3,2,1],[2,1]],Sorted) - это следующая строка кода, которая вызывает процедуру сортировки для двух других списков.
  7. Sorted = [[2, 1], [3, 2, 1]] - это результат работы процедуры сортировки, который присваивается переменной Sorted.
  8. [[3,2,1],[2,1]] - это список из двух подсписков, которые нужно отсортировать.
  9. [2, 1] - это первый отсортированный подсписк, который становится первым элементом результирующего списка.
  10. [3, 2, 1] - это второй отсортированный подсписок, который становится вторым элементом результирующего списка.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5