Проверка и реверсирование списка - Lisp

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

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

Проверяем подсписок на элементы с d по k, если таковые имеются, то выводим реверсированный список, если нет, то исходный.

Решение задачи: «Проверка и реверсирование списка»

textual
Листинг программы
(defun wtf2 (lst d k)
    (let ((pos-d (position d lst :test #'=))
          (pos-k (position k lst :test #'=)))
        (cond
            ((or (null pos-k) (null pos-d)) (reverse lst))
            (T (append (subseq lst 0 (+ pos-d 1)) (subseq lst pos-k (length lst)))))))
 
* (wtf2 '(1 2 3 4 5 6 7 8 9 10) 5 10)
 
(1 2 3 4 5 10)
 
* (wtf2 '(1 2 3 4 5 6 7 8 9 10) 25 1)
 
(10 9 8 7 6 5 4 3 2 1)

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

В коде определена функция wtf2, которая принимает два аргумента: lst и d. Аргумент lst представляет собой список, который необходимо проверить и/или перевернуть, а аргумент d - это элемент, который необходимо найти в списке. Внутри функции используется оператор let, чтобы создать две переменные: pos-d и pos-k. Переменная pos-d содержит позицию первого вхождения элемента d в списке lst, а переменная pos-k содержит позицию последнего вхождения элемента k в списке lst. Затем используется оператор cond, чтобы проверить два условия:

  1. Если pos-k или pos-d равны nil, то это означает, что элемент d или k не найден в списке lst. В этом случае функция возвращает перевернутый список lst.
  2. Если оба pos-k и pos-d не равны nil, то это означает, что элементы d и k найдены в списке lst. В этом случае функция возвращает список, который состоит из двух частей: первая часть - это подстрока списка lst от начала до позиции pos-d, а вторая часть - это подстрока списка lst от позиции pos-k до конца списка. Эти две части объединяются с помощью операции append. В конце кода приведены два примера вызова функции wtf2:
  3. * (wtf2 '(1 2 3 4 5 6 7 8 9 10) 5 10) - функция вызывается с аргументами lst = (1 2 3 4 5 6 7 8 9 10) и d = 5, k = 10. В этом случае функция возвращает перевернутый список (1 2 3 4 5 10).
  4. * (wtf2 '(1 2 3 4 5 6 7 8 9 10) 25 1) - функция вызывается с аргументами lst = (1 2 3 4 5 6 7 8 9 10) и d = 25, k = 1. В этом случае функция возвращает перевернутый список (10 9 8 7 6 5 4 3 2 1).

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


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

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

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