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

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

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

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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы