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

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

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

То есть function('(1 2 3 4), 2) -> '(11 22 33 44), помогите решить, заранее спасибо)

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

textual
Листинг программы
(defun map-repeat (w n)
  (mapcan #'(lambda (a) (loop for i from 1 to n collect a)) w))
 
> (map-repeat '(1 2 3) 2)
(1 1 2 2 3 3)

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

В коде определена функция map-repeat. Она принимает два аргумента: w и n. Значение переменной w является списком. Функция mapcan применяется к этому списку. Функция mapcan — это функция, которая принимает два аргумента: предикат и список. Она применяет предикат к каждому элементу списка и собирает все элементы, для которых предикат возвращает истину, в новый список. В данном случае в качестве предиката используется анонимная функция (lambda (a) (loop for i from 1 to n collect a)). Эта функция возвращает истину для каждого элемента a, удовлетворяющего условию loop for i from 1 to n collect a. То есть, для каждого элемента a в цикле от 1 до n (включительно). Таким образом, функция map-repeat принимает список w и число n, и возвращает новый список, в котором каждый элемент из w повторяется n раз. В приведенном примере функция map-repeat применяется к списку w = (1 2 3) и числу n = 2. Результатом выполнения является новый список (1 1 2 2 3 3).

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


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

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

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