Описать функцию, которая, выдавала бы элемент списка по заданному номеру, считая от конца - Lisp

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

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

Описать функцию, которая, выдавала бы элемент списка по заданному номеру, считая от конца. Все функции нужно сделать используя примитивные функции, типо типа car, cdr, без использования lambda и прочих сложных функций.

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

textual
Листинг программы
(defun task (lst n)
  (cond ((zerop n) (car (last lst)))
        (t (task (butlast lst) (- n 1)))))
 
==> TASK
 
(task '(1 2 3 4 5) 0)
 
==> 5
 
(task '(1 2 3 4 5) 1)
 
==> 4
 
(task '(1 2 3 4 5) 3)
 
==> 2

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

В коде определена функция task, которая принимает два аргумента: lst — список, и n — номер элемента, и должна возвращать элемент списка по заданному номеру, считая от конца. Функция реализована с помощью рекурсии и оператора cond. Когда n равно нулю, функция возвращает первый элемент списка (car (last lst)). Когда n не равно нулю, функция вызывает саму себя (task), передавая в качестве аргументов подсписок, полученный с помощью butlast lst, и уменьшенное на единицу значение n. В примере использования функции task передаётся список '(1 2 3 4 5) и числа 0, 1, 3, которые соответствуют номерам элементов 5, 4, 2. В результате выполнения функции task со списком '(1 2 3 4 5) и номером 0 возвращается элемент 5, для номера 1 возвращается элемент 4, для номера 3 возвращается элемент 2.

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


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

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

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