Сумма элементов списка CommonLisp

Узнай цену своей работы

Формулировка задачи:

Нужно найти сумму элементов списка,которые сами не являются списками.К примеру: (1 2 (3 4) 5 6)=>1+2+5 +6=14 Помогите пожалуйста

Решение задачи: «Сумма элементов списка CommonLisp»

textual
Листинг программы
(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.

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


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

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

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