Сумма элементов списка CommonLisp
Формулировка задачи:
Решение задачи: «Сумма элементов списка CommonLisp»
(defun task (lst) (apply '+ (remove-if 'listp lst))) ==> TASK (task '(1 2 (3 4) 5 6)) ==> 14 (defun task (lst) (cond ((null lst) 0) ((numberp (car lst)) (+ (car lst) (task (cdr lst)))) (t (task (cdr lst))))) ==> TASK (task '(1 2 (3 4) 5 6)) ==> 14
Объяснение кода листинга программы
В первом представленном фрагменте кода определена функция с именем task
, которая принимает в качестве аргумента список. Внутри функции происходит удаление из списка всех элементов, являющихся списками, а затем сумма оставшихся элементов списка.
Второй фрагмент кода определяет функцию с тем же именем task
, но немного по-другому. В этом определении используются условные операторы cond
, которые позволяют обрабатывать различные случаи. В частности, если список пуст, то возвращается 0. Если первый элемент списка является числом, то он добавляется к сумме, а функция вызывается рекурсивно для оставшейся части списка. В противном случае, если первый элемент является не числом, то функция вызывается рекурсивно для оставшейся части списка.
Для списка (1 2 (3 4) 5 6)
в обоих случаях будет возвращено число 14
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д