Сумма числовых элементов списка - Lisp
Формулировка задачи:
Вычислить сумму числовых элементов списка, учитывая элементы подсписков.
Например, результатом применения функции к аргументу ’(a 1 (b 4 c 5 (2 d 7)) e) должно быть 19.
Решение задачи: «Сумма числовых элементов списка»
textual
Листинг программы
(defun task (lst) (cond ((null lst) 0) ((listp (car lst)) (+ (task (car lst)) (task (cdr lst)))) ((numberp (car lst)) (+ (car lst) (task (cdr lst)))) (t (task (cdr lst))))) ==> TASK (task '(a 1 (b 4 c 5 (2 d 7)) e)) ==> 19
Объяснение кода листинга программы
В коде определена функция с именем task, которая принимает в качестве аргумента lst — список числовых элементов. Функция выполняет следующие действия:
- Проверяет, является ли lst пустым списком. Если это так, то возвращает 0.
- Если первый элемент lst является списком, то рекурсивно вызывает функцию task для этого элемента и для оставшейся части списка.
- Если первый элемент lst является числом, то прибавляет его к результату, а затем рекурсивно вызывает функцию task для оставшейся части списка.
- Если первый элемент lst не является числом или списком, то рекурсивно вызывает функцию task для оставшейся части списка. Значение переменной lst в момент вызова функции равно '(a 1 (b 4 c 5 (2 d 7)) e). Выполняются следующие проверки:
- (null lst) — проверка на пустой список. Функция возвращает 0.
- (listp (car lst)) — проверка на то, что первый элемент является списком. Функция рекурсивно вызывает себя для этого элемента и для оставшейся части списка.
- (numberp (car lst)) — проверка на то, что первый элемент является числом. Функция прибавляет его к результату и рекурсивно вызывает себя для оставшейся части списка.
- (t) — проверка на то, что первый элемент не является числом или списком. Функция рекурсивно вызывает себя для оставшейся части списка. В результате выполнения всех проверок и рекурсивных вызовов функции, возвращается значение 19.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д