На входе список и число N, создать новый список, в котором каждый элемент из исходного повторяется N раз - Lisp
Формулировка задачи:
Решение задачи: «На входе список и число N, создать новый список, в котором каждый элемент из исходного повторяется N раз»
(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).