Поменять местами первый элемент первого списка с последним элементом второго списка - Lisp

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

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

Здравствуйте, вот такое задание : Поменять местами первый элемент первого списка с последним элементом второго списка и наоборот. Получилось только поставить последний элемент второго списка в начало первого:
(DEFUN MEN (LST1 LST2) 
(COND ((CDR LST2)(MEN LST1 (CDR LST2))) 
((QUOTE NULL)(CONS (CAR LST2)(CDR LST1)) ) ))
Предполагаю, что нужно ввести еще один список и туда записывать второй список с измененным последним значением

Решение задачи: «Поменять местами первый элемент первого списка с последним элементом второго списка»

textual
Листинг программы
(defun task (lst1 lst2 &optional (a (car lst1)) (b (cdr lst1)) (c nil))
  (cond ((null (cdr lst2)) (list (cons (car lst2) b) (append (reverse c) (list a))))
        (t (task nil (cdr lst2) a b (cons (car lst2) c)))))
  
==> TASK
 
(task '(1 2 3 4 5) '(a b c))
 
==> ((C 2 3 4 5) (A B 1))
 
(task '(1 2 3 4 5) '(a b c d e f g))
 
==> ((G 2 3 4 5) (A B C D E F 1))

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

В коде определена функция с именем task. Она принимает два аргумента: lst1 и lst2. Аргумент lst1 является первым списком, а lst2 — вторым. Также у функции есть три опциональных аргумента: a, b и c. Если a не указан, то он будет равен первому элементу lst1, если b не указан, то он будет равен остальной части lst1 после первого элемента, а если c не указан, то он будет равен nil. Функция task рекурсивно вызывается для каждого из двух списков, пока не будет достигнуто условие выхода из рекурсии. Если второй список пуст, то функция возвращает новый список, в котором первый элемент второго списка и последний элемент первого списка поменяны местами, а остальная часть первого списка и второго списка объединяются в обратном порядке. Если второй список не пуст, то функция рекурсивно вызывается для второго списка с обновленными значениями a, b и c. Примеры использования функции task:

  1. (task '(1 2 3 4 5) '(a b c)) вернет новый список ((C 2 3 4 5) (A B 1)), где первый элемент первого списка и последний элемент второго списка поменяны местами.
  2. (task '(1 2 3 4 5) '(a b c d e f g)) вернет новый список ((G 2 3 4 5) (A B C D E F 1)), где первый элемент первого списка и последний элемент второго списка поменяны местами.

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


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

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

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