Удалить элементы списка вне диапазона - Lisp

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

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

Диапазон задан не порядком элементов (от 4 до 10, например), а минимальным и максимальным значением. Нашёл здесь нечто похожее, но после моей "переделки" - работает не корректно. выводится исходный список.
 (defun myFilter (mn mx list)
  (if list
      (let ((head (car list))
            (tail (cdr list)))
        (if (and (>= head mx)(<= head mn))
            (myFilter mn  mx tail)
            (cons head (myFilter mn mx tail))))))
Буду рад помощи!

Решение задачи: «Удалить элементы списка вне диапазона»

textual
Листинг программы
(defun range (n m w)
  (remove-if-not #'(lambda (a)(<= n a m)) w))
 
> (range 1 3 '(1 2 3 -4 7 2 11 5))
(1 2 3 2)

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

В данном коде представлена функция с именем range, которая принимает три аргумента: n, m, w.

  1. Аргумент n — это номер первого элемента в диапазоне, который должен быть удален.
  2. Аргумент m — это номер последнего элемента в диапазоне, который должен быть удален.
  3. Аргумент w — это список, из которого необходимо удалить элементы вне диапазона. Функция использует следующую логику:
  4. Создается новая функция remove-if-not с помощью которой будет происходить удаление элементов из списка w.
  5. Внутри функции remove-if-not используется лямбда-функция, которая проверяет условие: a (текущий элемент списка) должен быть больше или равен аргументу n и меньше аргумента m.
  6. Если условие выполняется, то элемент a удаляется из списка w.
  7. Результатом работы функции range будет список w без элементов вне диапазона. В данном примере функция range вызывается с аргументами: n=1, m=3, w='(1 2 3 -4 7 2 11 5). После удаления элементов вне диапазона, результатом будет список (1 2 3 2).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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