Из списка чисел s создать новый список, меняя знак у каждого атома - Lisp

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

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

Всем привет! есть задание: Определите функцию (f s), которая из списка чисел s создает новый список, меняя знак у каждого атома. Исходный список не предполагается одноуровневым. Имеется собственно и решение:
Листинг программы
  1. (defun L (lst)
  2. (mapcar #'(lambda (x) (if (numberp x) (- x) (L x))) lst))
нашел в просторах интернета, но не понимаю в нем ничего. Можно ли сделать тоже самое с использованием функционала, но без решеток и ламбды? Заранее благодарен!

Решение задачи: «Из списка чисел s создать новый список, меняя знак у каждого атома»

textual
Листинг программы
  1. (defun L (lst)
  2.   (mapcar #'(lambda (x) (if (numberp x) (- x) (if (atom x) x  (L x)))) lst))
  3.  
  4. ==> L
  5.  
  6. (L '(1 2 3 d ((q 2 3 e))))
  7.  
  8. ==> (-1 -2 -3 d ((q -2 -3 e)))

Объяснение кода листинга программы

В коде определён встроенный функционал языка Lisp для работы с символами и списками. В функции L используется функция mapcar, которая применяет к каждому элементу списка lst анонимную функцию. Анонимная функция проверяет каждый элемент списка на число с помощью функции numberp. Если элемент является числом, то он меняет знак с помощью функции -. Далее, если элемент является атомом, то он возвращается без изменений. Если элемент не является числом или атомом, то вызывается рекурсивный вызов функции L для обработки этого элемента. Примеры вызовов функции L показывают, как она обрабатывает список '(1 2 3 d ((q 2 3 e))) и возвращает новый список (-1 -2 -3 d ((q -2 -3 e))).

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


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

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

9   голосов , оценка 4.111 из 5

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

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

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