Как определить предикатами, что список является отсортированным? - Prolog

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

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

Помогите с решением. Есть вот такой код, который определяет отсортирован ли список.
Как можно изменить код, чтобы можно было предикатами решить методом резолюции? В особенности обойтись без восклицательного знака? ( :- ! )

Решение задачи: «Как определить предикатами, что список является отсортированным?»

textual
Листинг программы
isSort([]).
isSort([_]).
isSort([_, _]).
isSort([X,Y,Z|Tail]):- (Y-X) * (Z-Y) >=0, isSort([Y,Z|Tail]).

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

  1. isSort([]). - базовый случай, когда список пуст, считается отсортированным
  2. isSort([_]). - список содержит один элемент, считается отсортированным
  3. isSort([_, _]). - список содержит два элемента, считается отсортированным, если разница между ними не больше 0
  4. isSort([X,Y,Z|Tail]):- (Y-X) * (Z-Y) >=0, isSort([Y,Z|Tail]). - рекурсивный случай, когда список содержит более двух элементов. Проверяется, что разница между вторым и первым элементом положительна и не равна нулю. Затем рекурсивно вызывается функция isSort для оставшейся части списка
  5. Код не содержит использования дополнительных переменных, поэтому список можно считать законченным

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

11   голосов , оценка 3.909 из 5
Похожие ответы