Задача на функционал. LispWorks
Формулировка задачи:
Реализовать функционал, который выполняет заданную функцию над всеми элементами списка вида:
(((...)(...)x2)((...)(...)x3)x1)
Например, список : ( ((1 2) (3 4)) ((5 6) (7 8)) 9 10 11 12) Например, сделать функцию, чтобы она для всех элементов этого списка записывала в список элемент и квадрат. Нужна помощь!Решение задачи: «Задача на функционал. LispWorks»
textual
Листинг программы
(defun применить (список функция) (mapcar #'(lambda (x) (if (atom x) (funcall функция x) (применить x функция))) список)) ==> применить (defun возвести-в-квадрат (x) (* x x)) ==> возвести-в-квадрат (применить '((1 2) 3 (((4 5 6) 7) 8)) 'возвести-в-квадрат) ==> ((1 4) 9 (((16 25 36) 49) 64))
Объяснение кода листинга программы
В коде определена функция применить
, которая принимает два аргумента: список и функцию. Функция применить
применяет функцию к каждому элементу списка, передавая его в функцию. Если элемент списка является атомом, то он передаётся в функцию, если нет — рекурсивно вызывается функция применить
.
В коде также определена функция возвести-в-квадрат
, которая принимает один аргумент и возвращает его квадрат.
В конце кода вызывается функция применить
с аргументами ((1 2) 3 (((4 5 6) 7) 8))
и возвести-в-квадрат
. Результатом выполнения кода будет ((1 4) 9 (((16 25 36) 49) 64))
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д