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

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

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

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

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

textual
Листинг программы
(defun L (lst)
  (mapcar #'(lambda (x) (if (numberp x) (- x) (if (atom x) x  (L x)))) lst))
 
==> L
 
(L '(1 2 3 d ((q 2 3 e))))
 
==> (-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
Похожие ответы