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

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

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

Даны натуральные m, n, k, l и некоторый список. Удалить из списка элементы с номерами с m-го по n-й ,без удаления элементов с k-го по l-й. Интервал с k по l должен находит

ь

ся внутри интервала m по n. Не используя mapcar lambda apply Пример: (task '(1 2 3 4 5 6 7 8 9) m n k l) m=1 n=7 k=3 l=5 Ответ: (1 4 5 6 9)

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

textual
Листинг программы
(defun task (lst m n k l)
  (cond
    ((null lst) nil)
    ((or (<= m 0 (1- k)) (<= (1+ l) 0 n)) (task (cdr lst) (1- m) (1- n) (1- k) (1- l)))
    (T (cons (car lst) (task (cdr lst) (1- m) (1- n) (1- k) (1- l))))))

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

В данном коде определена функция с именем task. Она принимает в качестве аргументов список (lst), а также 4 числа: m, n, k, l. Если список пустой, то функция возвращает nil. В противном случае, функция проверяет условие:

  • Если m меньше или равно 0, и (1-k) меньше или равно 0, и (1-l) меньше или равно 0, и (1-n) меньше или равно 0, то рекурсивно вызывается функция task с аргументами (cdr lst), (1-m), (1-n), (1-k), (1-l). То есть, из списка удаляется первый элемент, и функция вызывается снова для оставшегося списка, при этом уменьшается значение каждого из чисел на 1.
  • Если условие не выполняется, то функция возвращает список, в котором первым элементом является первый элемент списка (car lst), а остальные элементы списка удаляются.

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


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

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

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