Выбрать из списка каждый третий элемент - Lisp

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

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

Выбрать из списка каждый третий элемент и возвратить их в новый список. Помогите пожалуйста, совсем недавно начал учить лисп.

Решение задачи: «Выбрать из списка каждый третий элемент»

textual
Листинг программы
(defun thirds (w &optional ac)
  (if (cddr w) 
      (thirds (cdddr w) (cons (caddr w) ac))
      (nreverse ac)))
 
> (thirds '(1 2 3 4 5 6))
(3 6)

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

В коде представлена функция thirds, которая принимает два аргумента: w и ac. Аргумент w является списком, а аргумент ac — ассоциативным списком. Если w не является пустым списком, то функция thirds вызывает саму себя, передавая в качестве аргументов cddr w (оставшаяся часть списка w после удаления первого элемента) и cons (caddr w) ac (новый элемент списка ac, полученный путем добавления третьего элемента списка w в начало списка ac). Если w является пустым списком, то функция thirds вызывает функцию nreverse для переменной ac (возвращает список ac в обратном порядке) и возвращает результат. В примере использования функции thirds передается список '(1 2 3 4 5 6) в качестве аргумента w. Функция thirds вызывает себя рекурсивно для списка '(3 4 5 6) и добавляет третий элемент списка '(3 4 5 6) (который является числом 6) в начало списка ac. Затем функция вызывает себя снова для списка '(4 5 6) и добавляет третий элемент списка '(4 5 6) (который является числом 6) в начало списка ac. Наконец, функция вызывает себя еще раз для списка '(5 6) и добавляет третий элемент списка '(5 6) (который является числом 6) в начало списка ac. В результате функция возвращает список '(3 6).

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


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

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

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