На входе список и число 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)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д