Предикат, который проверяет, является ли простой список чисел монотонной последовательностью - Lisp

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

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

Пожалуйста, помогите решить следующую задачку! Определить предикат, который проверяет, является ли простой список чисел монотонной последовательностью. Заранее спасибо!

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

textual
Листинг программы
(defun monotonic-p (lst)
    ( (lambda (f-rec)
       (f-rec (if (<= (car lst) (cadr lst)) <= >=)
          (cdr lst)))
      (lambda (acc lst)
    (if (cddr lst)
      (if (acc (car lst) (cadr lst))
        (f-rec acc (cdr lst)))
      T))))

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

В данном коде определен вспомогательный анонимный предикат (lambda), который принимает два аргумента: f-rec и lst.

  1. (defun monotonic-p (lst)
  2. ( (lambda (f-rec)
  3. (f-rec (if (<= (car lst) (cadr lst)) <= >=)
  4. (cdr lst)))
  5. (lambda (acc lst)
  6. (if (cddr lst)
  7. (if (acc (car lst) (cadr lst))
  8. (f-rec acc (cdr lst)))
  9. T))))
  10. В первой части кода создается функция с именем monotonic-p, которая принимает один аргумент lst.
  11. Вторая часть кода — это тело функции monotonic-p.
  12. Внутри функции определена еще одна анонимная функция (lambda), которая будет использоваться внутри функции monotonic-p.
  13. Первая анонимная функция вызывается с аргументами f-rec и lst.
  14. Внутри этой функции происходит проверка: если элемент списка (car lst) меньше или равен следующему элементу (cadr lst), то вызывается рекурсивно первая анонимная функция с аргументами (cdr lst).
  15. Вторая анонимная функция вызывается с аргументами acc и lst.
  16. Внутри этой функции происходит проверка: если список не пустой, то вызывается рекурсивно вторая анонимная функция с аргументами (cdr lst).
  17. Если условие не выполняется, то возвращается значение T.
  18. Если список пустой, то возвращается значение T.
  19. В первой анонимной функции, если условие не выполняется, то вызывается вторая анонимная функция с аргументами (cdr lst).
  20. Если условие не выполняется, то возвращается значение T.

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

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