Определить функцию, возвращающую последний элемент - Lisp (229099)

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

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

Необходимо определить функцию, возвращающую последний элемент списка, содержащего не более 3-х элементов. Если не больше 3-х элементов - выводим последний, иначе сообщение 'spisok>3. Моя программа почему-то всегда переходит на ветку, с сообщением, что элементов больше трех. Помогите исправить ошибку
(defun get-last (lst)
(if (>= (length lst) 3) 
  (cond ((null (cdr lst)) (car lst))
        (t (get-last (cdr lst))))) 'spisok>3)

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

textual
Листинг программы
(defun dummy-task (lst &optional (c 0))
  (cond ((>= c 3) "Список слишком длинен")
        ((null (cdr lst)) (car lst))
        (t (dummy-task (cdr lst) (+ c 1))))) 
  
==> DUMMY-TASK
 
(dummy-task '(1 2 3 4 5))
 
==> "Список слишком длинен"
 
(dummy-task '(1 2 3 4))
 
==> "Список слишком длинен"
 
(dummy-task '(1 2 3))
 
==> 3
 
(dummy-task '(1 2))
 
==> 2

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

В коде определена функция dummy-task, которая принимает два аргумента: lst и c. Аргумент lst является списком, а аргумент c — это счетчик, который итерирует по элементам списка. Если счетчик c больше или равен 3, то возвращается строка Список слишком длинен. Это условие предотвращает перебор элементов списка, если он слишком длинный. Если список lst пуст (т.е. null (cdr lst)), то возвращается первый элемент списка (т.е. car lst). Если условие выше не выполняется, то функция рекурсивно вызывается для списка cdr lst и увеличенного значения счетчика c (т.е. dummy-task (cdr lst) (+ c 1)). Примеры использования функции:

  1. (dummy-task '(1 2 3 4 5)). Вернет Список слишком длинен, так как счетчик c достигнет значения 3 до того, как список станет пустым.
  2. (dummy-task '(1 2 3 4)).. Вернет Список слишком длинен, так как счетчик c достигнет значения 3 до того, как список станет пустым.
  3. (dummy-task '(1 2 3)).. Вернет 3, так как счетчик c не достигнет значения 3 до того, как список станет пустым.
  4. (dummy-task '(1 2)).. Вернет 2, так как счетчик c не достигнет значения 3 до того, как список станет пустым.

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


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

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

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