Задача на функционал. LispWorks

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

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

Реализовать функционал, который выполняет заданную функцию над всеми элементами списка вида:

(((...)(...)x2)((...)(...)x3)x1)

Например, список : ( ((1 2) (3 4)) ((5 6) (7 8)) 9 10 11 12) Например, сделать функцию, чтобы она для всех элементов этого списка записывала в список элемент и квадрат. Нужна помощь!

Решение задачи: «Задача на функционал. LispWorks»

textual
Листинг программы
  1. (defun применить (список функция)
  2.   (mapcar #'(lambda (x) (if (atom x) (funcall функция x) (применить x функция))) список))
  3.  
  4. ==> применить
  5.  
  6. (defun возвести-в-квадрат (x) (* x x))
  7.  
  8. ==> возвести-в-квадрат
  9.  
  10. (применить '((1 2) 3 (((4 5 6) 7) 8)) 'возвести-в-квадрат)
  11.  
  12. ==> ((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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут