Определите функцию (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)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д