Переставить 2 элемента списка местами заданные по индексу (ошибка) - Lisp

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

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

Переставить 2 элемента списка местами заданные по индексу (номеру)
Листинг программы
  1. func
  2. (defun swap
  3. (List i1 i2)(let ((first nil)(second nil)(res nil)(tmp List)(i 0))
  4. (loop (cond ((= i i1)
  5. (setq first (car List)))((= i i2)
  6. (setq second (car List))))(if (and first second)(return))
  7. (setq List (cdr List))(setq i (+ i 1)))
  8. (setq i 0)(loop (if (null tmp)(return))(cond ((= i i1)
  9. (setq res (cons second res)))((= i i2)
  10. (setq res (cons first res)))(T (setq res (cons (car tmp) res))))
  11. (setq tmp (cdr tmp))
  12. (setq i (+ i 1)))(reverse res)))
==> swap Файл C:\HomeLisp\7.lsp успешно загружен (swap '(1 2 3 4 5) 1 2) Неожиданный конец списка. Последнее выражение: NIL Глубина вызова EVAL: 3 ==> ERRSTATE Связанно наверно с какой то особенностью хоумлиспа, помогите понять что не так

Решение задачи: «Переставить 2 элемента списка местами заданные по индексу (ошибка)»

textual
Листинг программы
  1. (defun swap (n m w)
  2.   (rotatef (nth n w)
  3.            (nth m w))
  4.   w)
  5.  
  6. > (swap 2 5 '(1 2 3 4 5 6 7))
  7. (1 2 6 4 5 3 7)

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

В коде определён пользовательский функционал swap, который принимает три аргумента: n (номер первого элемента), m (номер второго элемента) и w (сам список). Функция rotatef используется для перестановки элементов в списке w на позиции, заданные номерами n и m. Поскольку функция rotatef меняет список w на месте, то после её вызова список w будет изменён. Таким образом, результат выполнения функции swap будет равен изменённому списку w. В данном примере список w имеет вид (1 2 3 4 5 6 7), а после выполнения функции swap с заданными аргументами (2 5) результат будет следующим: (1 2 6 4 5 3 7).

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


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

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

14   голосов , оценка 3.929 из 5

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

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

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