Разделить список на 2, в первый поместить четные элементы исходного списка, во второй - нечетные - Lisp

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

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

Помогите пожалуйста, написать программу переносящую все нечетные элементы одномерного числового массива в один новый массив,а четные в другой

Решение задачи: «Разделить список на 2, в первый поместить четные элементы исходного списка, во второй - нечетные»

textual
Листинг программы
(defun task (lst)
  (let ((l-odd nil)
        (l-even nil))
   (iter (for i in lst)
     (if (oddp i) (collecting i into l-odd)
                  (collecting i into l-even)))
   (values l-odd l-even))) 
 
==> task
 
(task '(1 2 3 4 5 6 7))
 
==> (1 3 5 7)
(2 4 6)
 
(defun task (lst &optional (l-odd nil) (l-even nil))
  (cond ((null lst) (values (reverse l-odd) (reverse l-even)))
        ((oddp (car lst)) (task (cdr lst) (cons (car lst) l-odd) l-even))
        (t                (task (cdr lst) l-odd (cons (car lst) l-even)))))
 
 
 
 
==> task
 
(task '(1 2 3 4 5 6 7))
 
==> (1 3 5 7)
(2 4 6)

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

В первом представленном коде функцией task разделяются список на два: нечетные и четные элементы. Для этого используется встроенная функция iter, которая позволяет итерироваться по элементам списка. Второй код делает то же самое, но он более универсален. Он может принимать список и два пустых списка в качестве аргументов. Если список пустой, то возвращаются два пустых списка. Если первый элемент списка нечетный, то он добавляется в конец списка нечетных чисел, а список четным чисел остается пустым. Если первый элемент списка четный, то он добавляется в конец списка четных чисел, а список нечетных чисел остается пустым. В противном случае рекурсивно вызывается функция task для оставшейся части списка и двух списков, которые были переданы в качестве аргументов. В обоих случаях результатом работы функции является два списка: один с нечетными числами, другой с четными числами.

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


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

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

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