Вывести в виде отдельных списков нечетные и четные элементы списка Y1 (нумерация элементов начинается с 0) - Lisp

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

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

Помогите пожалуйста с задчей: Вывести в виде отдельных списков нечетные и четные элементы списка Y1 (нумерация элементов начинается с 0)

Решение задачи: «Вывести в виде отдельных списков нечетные и четные элементы списка Y1 (нумерация элементов начинается с 0)»

textual
Листинг программы
(defun odd/even (w &optional odds evens)
  (cond ((null w) (list (reverse odds) (reverse evens)))
        ((oddp (car w)) (odd/even (cdr w) (cons (car w) odds) evens))
        ((odd/even (cdr w) odds (cons (car w) evens)))))
 
> (odd/even '(1 2 3 4 5 6))
((1 3 5) (2 4 6))

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

Функция odd/even принимает два аргумента: w — список, который необходимо обработать, и два необязательных аргумента odds и evens, которые используются для накопления нечетных и четных элементов соответственно. Если список w пуст, то возвращается список, состоящий из двух пустых списков. Если первый элемент списка w нечетный, то вызывается рекурсивная функция odd/even для обработки оставшейся части списка, а в список odds добавляется текущий элемент. Если первый элемент списка w четный, то вызывается рекурсивная функция odd/even для обработки оставшейся части списка, а в список evens добавляется текущий элемент. Если список w не является пустым, то для определения, какие элементы добавлять в список odds, а какие в список evens, используется условие (oddp (car w)). Если это условие истинно, то в список odds добавляется текущий элемент, а в список evens ничего не добавляется. Если это условие ложно, то в список odds ничего не добавляется, а в список evens добавляется текущий элемент. Функция odd/even вызывается с аргументом '(1 2 3 4 5 6), который содержит список чисел. После обработки этого списка функцией odd/even, возвращается результат ((1 3 5) (2 4 6)), который представляет собой два списка: нечетные элементы [(1 3 5)] и четные элементы [(2 4 6)].

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


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

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

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