Определите функцию (f s n), которая из списка чисел s создает новый список, прибавляя к каждому атому число n - Lisp
Формулировка задачи:
Определите функцию (f s n), которая из списка чисел s создает новый список, прибавляя к каждому атому число n. Исходный список не предполагается одноуровневым. Для программирования использовать функционалы.
(defun dobavka(s n) (cond ((null s) nil) ((if (atom (car s)) (dobavka (cdr s) n)) (cons (dobavka (car s) n) (dobavka (cdr s) n)) ) (t (cons (+ (car s) n) (dobavka (cdr s) n))) ))
Решение задачи: «Определите функцию (f s n), которая из списка чисел s создает новый список, прибавляя к каждому атому число n»
textual
Листинг программы
(defun incr-num (lst n) (mapcar #'(lambda (x) (cond ((numberp x) (+ x n)) ((listp x) (incr-num x n)) (t x))) lst)) ==> incr-num (incr-num '(1 2 a b (((c d 8)) -7 g) k 8) 4) ==> (5 6 a b (((c d 12)) -3 g) k 12)
Объяснение кода листинга программы
В данном коде определена функция incr-num, которая принимает два аргумента: lst — список чисел, и n — число, на которое необходимо увеличить каждый элемент списка. Функция реализует следующие шаги:
- Используя функцию mapcar, происходит применение к каждому элементу списка lst анонимной функции #'(lambda (x) (cond ((numberp x) (+ x n)) ((listp x) (incr-num x n)) (t x))).
- Анонимная функция проверяет, является ли элемент списка числом. Если это так, то к нему прибавляется число n.
- Если элемент списка является списком, то рекурсивно вызывается функция incr-num для увеличения каждого элемента вложенного списка.
- Если элемент списка не является числом или списком, то он оставляется без изменений.
- Результатом работы функции является новый список, в котором каждый элемент увеличен на число n. Пример использования функции: (incr-num '(1 2 a b (((c d 8)) -7 g) k 8) 4) Результат выполнения: (5 6 a b (((c d 12)) -3 g) k 12)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д