Определить предикат, проверяющий что элементы попали в интервал - Lisp
Формулировка задачи:
Определить предикат, проверяющий, что все элементы исходного списка попадают в заданный интервал
Решение задачи: «Определить предикат, проверяющий что элементы попали в интервал»
textual
Листинг программы
(defn test [lst from upto] (loop [[x & xs :as xx] lst] (or (nil? xx) (and (<= from x upto) (recur xs)))))
Объяснение кода листинга программы
В данном коде определён рекурсивный функционал для проверки, что все элементы списка удовлетворяют условию, указанному с помощью предиката test.
Алгоритм работы следующий:
- Входные данные: список
lstи два значенияfromиupto. - С помощью цикла
loopрекурсивно вызывается функция с двумя аргументами:xxи остаток спискаxs. - Если остаток списка не пустой, то в
xxвключается первый элемент и возвращается рекурсивный вызов с остатком списка. - Если остаток списка пустой, то проверяется условие
and: - Условие
<= from x uptoпроверяет, что текущий элементxпопадает в интервал отfromдоupto. - Если условие не выполняется, то возвращается
nil, иначе возвращается результат рекурсивного вызова с остатком списка. - Результатом работы функции будет
nilили значение, полученное с помощью рекурсивного вызова.