Задача на функционал. 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)).

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


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

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

11   голосов , оценка 3.727 из 5