Как определить предикатами, что список является отсортированным? - Prolog
Формулировка задачи:
Помогите с решением. Есть вот такой код, который определяет отсортирован ли список.
Как можно изменить код, чтобы можно было предикатами решить методом резолюции?
В особенности обойтись без восклицательного знака? ( :- ! )
Решение задачи: «Как определить предикатами, что список является отсортированным?»
textual
Листинг программы
isSort([]). isSort([_]). isSort([_, _]). isSort([X,Y,Z|Tail]):- (Y-X) * (Z-Y) >=0, isSort([Y,Z|Tail]).
Объяснение кода листинга программы
isSort([]).
- базовый случай, когда список пуст, считается отсортированнымisSort([_]).
- список содержит один элемент, считается отсортированнымisSort([_, _]).
- список содержит два элемента, считается отсортированным, если разница между ними не больше 0isSort([X,Y,Z|Tail]):- (Y-X) * (Z-Y) >=0, isSort([Y,Z|Tail]).
- рекурсивный случай, когда список содержит более двух элементов. Проверяется, что разница между вторым и первым элементом положительна и не равна нулю. Затем рекурсивно вызывается функцияisSort
для оставшейся части списка- Код не содержит использования дополнительных переменных, поэтому список можно считать законченным