Сумма числовых элементов списка - 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 — список числовых элементов. Функция выполняет следующие действия:

  1. Проверяет, является ли lst пустым списком. Если это так, то возвращает 0.
  2. Если первый элемент lst является списком, то рекурсивно вызывает функцию task для этого элемента и для оставшейся части списка.
  3. Если первый элемент lst является числом, то прибавляет его к результату, а затем рекурсивно вызывает функцию task для оставшейся части списка.
  4. Если первый элемент lst не является числом или списком, то рекурсивно вызывает функцию task для оставшейся части списка. Значение переменной lst в момент вызова функции равно '(a 1 (b 4 c 5 (2 d 7)) e). Выполняются следующие проверки:
  5. (null lst) — проверка на пустой список. Функция возвращает 0.
  6. (listp (car lst)) — проверка на то, что первый элемент является списком. Функция рекурсивно вызывает себя для этого элемента и для оставшейся части списка.
  7. (numberp (car lst)) — проверка на то, что первый элемент является числом. Функция прибавляет его к результату и рекурсивно вызывает себя для оставшейся части списка.
  8. (t) — проверка на то, что первый элемент не является числом или списком. Функция рекурсивно вызывает себя для оставшейся части списка. В результате выполнения всех проверок и рекурсивных вызовов функции, возвращается значение 19.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы