Удалить элементы первого списка по номерам второго списка без использования вспомогательных функций - Lisp

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

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

Может кто знает классический вид функции удаление элементов списка по номерам второго списка.Важно то,что нельзя использовать вспомогательные функции и циклы.

Решение задачи: «Удалить элементы первого списка по номерам второго списка без использования вспомогательных функций»

textual
Листинг программы
(defun drop (v w &optional (n 0)
                 &aux (q (cdr w))
                      (m (1+ n)))
  (cond
    ((some 'null (list v w)) w)
    ((find n v) (drop (remove n v) q m))
    ((cons (car w) (drop v q m)))))

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

В данном коде определён функцией drop с тремя аргументами v, w и n. Если n не равно 0, то оно перенаправляется в w. Далее в w удаляются элементы с указанными номерами, и результат выводится на экран. Если n равно 0, то выводится список v. Вот список номеров, названий и значений переменных в порядке их использования в коде:

  1. v — список, элементы которого будут удалены
  2. w — список, из которого будут удалены элементы
  3. n — номер элемента, который будет удален
  4. q — хвост списка w
  5. m — номер следующего элемента для удаления Список номеров 1-5 относится к первому использованию функции drop. В этом случае, если n не равно 0, то выполняется следующая последовательность действий:
  6. w присваивается значение cdr w, то есть хвост списка w
  7. В w удаляются элементы с номерами, указанными в n
  8. Результат присваивается q
  9. m присваивается значение 1+ n, то есть номер следующего элемента для удаления Список номеров 6-9 относится ко второму использованию функции drop внутри условного оператора cond. В этом случае, если n не равно 0, то выполняется следующая последовательность действий:
  10. w присваивается значение remove n v, то есть список v без элементов с номерами, указанными в n
  11. В w удаляются элементы с номерами, указанными в n
  12. Результат присваивается q
  13. m присваивается значение 1+ n, то есть номер следующего элемента для удаления Список номеров 10-14 относится к третьему использованию функции drop внутри условного оператора cond. В этом случае, если n не равно 0, то выполняется следующая последовательность действий:
  14. w присваивается значение cons (car w) (drop v q m), то есть список w с первым элементом, удаленным элементом и оставшимися элементами
  15. В w удаляются элементы с номерами, указанными в n
  16. Результат присваивается q
  17. m присваивается значение 1+ n, то есть номер следующего элемента для удаления Если n равно 0, то выполняется следующая последовательность действий:
  18. w присваивается значение v, то есть список v
  19. Результат выводится на экран

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


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

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

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