Написать программу для циклического сдвига списка на n-1 элементов влево - Lisp

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

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

Здравствуйте, помогите написать программу на Lisp Написать программу для циклического сдвига списка на n-1 элементов влево (очень нужно)

Решение задачи: «Написать программу для циклического сдвига списка на n-1 элементов влево»

textual
Листинг программы
  1. (defun task (lst n &optional (nn (rem n (length lst))))
  2.   (append (subseq lst nn) (subseq lst 0 nn)))
  3.  
  4. ==> task
  5.  
  6. (task '(1 2 3 4 5 6 7 8) 10)
  7.  
  8. ==> (3 4 5 6 7 8 1 2)
  9.  
  10. (task '(1 2 3 4 5 6 7 8) 1)
  11.  
  12. ==> (2 3 4 5 6 7 8 1)
  13.  
  14. (task '(1 2 3 4 5 6 7 8) 2)
  15.  
  16. ==> (3 4 5 6 7 8 1 2)
  17.  
  18. ;; Или так:
  19.  
  20. (defun task (lst n)
  21.   (if (zerop n) lst (task (append (last lst) (butlast lst)) (- n 1))))
  22.  
  23. ==> task
  24.  
  25. (task '(1 2 3 4 5 6 7 8) 1)
  26.  
  27. ==> (8 1 2 3 4 5 6 7)
  28.  
  29. (task '(1 2 3 4 5 6 7 8) 2)
  30.  
  31. ==> (7 8 1 2 3 4 5 6)
  32.  
  33. (task '(1 2 3 4 5 6 7 8) 122)
  34.  
  35. ==> (7 8 1 2 3 4 5 6)

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

Код представляет собой функцию под названием task, которая принимает два аргумента: lst и n. В первом варианте кода функция реализует циклический сдвиг списка на n-1 элементов влево с помощью функций append, subseq и rem. Во втором варианте кода реализована рекурсивная реализация циклического сдвига списка на n элементов влево с использованием функций if, append, last, butlast, zerop и (- n 1). Если n равно нулю, то функция возвращает исходный список lst. Если n больше нуля, то функция вызывает саму себя, обрезая список на n элементов с обоих концов, и уменьшает значение n на единицу.

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


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

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

9   голосов , оценка 3.556 из 5

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

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

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