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

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

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

Определить предикат, проверяющий, что все элементы исходного списка попадают в заданный интервал

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

textual
Листинг программы
(defn test [lst from upto]
  (loop [[x & xs :as xx] lst]
    (or (nil? xx)
        (and (<= from x upto)
             (recur xs)))))

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

В данном коде определён рекурсивный функционал для проверки, что все элементы списка удовлетворяют условию, указанному с помощью предиката test. Алгоритм работы следующий:

  1. Входные данные: список lst и два значения from и upto.
  2. С помощью цикла loop рекурсивно вызывается функция с двумя аргументами: xx и остаток списка xs.
  3. Если остаток списка не пустой, то в xx включается первый элемент и возвращается рекурсивный вызов с остатком списка.
  4. Если остаток списка пустой, то проверяется условие and:
  5. Условие <= from x upto проверяет, что текущий элемент x попадает в интервал от from до upto.
  6. Если условие не выполняется, то возвращается nil, иначе возвращается результат рекурсивного вызова с остатком списка.
  7. Результатом работы функции будет nil или значение, полученное с помощью рекурсивного вызова.

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

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