Разбить список на два подсписка - Lisp

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

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

2) Задача. Произвольный список вида (а1,а2,...,ак) разбить на два подсписка (а1,а3,а5...) и (а2,а4,а6...). в одну функцию Спасибо

Решение задачи: «Разбить список на два подсписка»

textual
Листинг программы
  1. (defun F (lst &optional a b)
  2.   (if lst
  3.       (F (cddr lst)
  4.          (nconc a (list (first lst)))
  5.          (if (second lst)
  6.              (nconc b (list (second lst)))
  7.              b))
  8.       (list a b)))
  9.  
  10. > (F '(1 2 3 4 5 6 7 8 9))
  11. ((1 3 5 7 9) (2 4 6 8))

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

В коде определённая функция F, которая принимает два аргумента: lst — список, который необходимо разбить на подсписки, и два опциональных аргумента a и b, которые будут использоваться для накопления результатов. Если lst не равно nil, то функция рекурсивно вызывается для оставшейся части списка (cddr lst), при этом в качестве значения первого аргумента используется результат этого вызова. Второй аргумент передаётся в функцию nconc вместе с первым элементом списка (first lst), полученным с помощью функции first. Если lst равно nil, то результатом выполнения функции является список, состоящий из двух элементов: a и b. При вызове функции F с аргументом '(1 2 3 4 5 6 7 8 9) в качестве значения a будет использован список (1 3 5 7 9), а в качестве значения b — список (2 4 6 8). Результатом выполнения функции будет список списков ((1 3 5 7 9) (2 4 6 8)).

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


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

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

6   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы