Описать функцию, которая находила бы сумму всех числовых атомов в списке, учитывая все атомы подсписков - Lisp (229330)

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

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

Описать функцию, которая находила бы сумму всех числовых атомов в списке, учитывая все атомы подсписков.

Решение задачи: «Описать функцию, которая находила бы сумму всех числовых атомов в списке, учитывая все атомы подсписков»

textual
Листинг программы
(defun sum-num (lst)
  (apply '+ (mapcar (lambda (x) (if (listp x) (sum-num x) (if (numberp x) x 0))) lst))) 
 
==> SUM-NUM
 
(sum-num '(1 2 a b (3 4 (f g 5 6))))
 
==> 21
 
(defun sum-num (lst)
  (cond ((null lst) 0)
        ((listp (car lst)) (+ (sum-num (car lst)) (sum-num (cdr lst))))
        ((numberp (car lst)) (+ (car lst) (sum-num (cdr lst))))
        (t (sum-num (cdr lst))))) 
 
==> SUM-NUM
 
(sum-num '(1 2 a b (3 4 (f g 5 6))))
 
==> 21

Объяснение кода листинга программы

Код представляет собой функцию под названием sum-num, которая принимает в качестве входного аргумента lst — список. В первом куске кода используется функция apply, чтобы применить оператор + к результатам, возвращаемым функцией mapcar. Функция mapcar применяет к каждому элементу списка lst лямбда-функцию, которая проверяет, является ли элемент числом или списком. Если это число, оно добавляется к сумме. Если это список, функция рекурсивно вызывает себя для этого элемента. Если это не список и не число, то возвращается ноль. Во втором куске кода используется функция cond, которая проверяет различные условия и возвращает соответствующее значение. Если lst — это nil, возвращается ноль. Если lst — это список, функция рекурсивно вызывает себя для первого элемента списка и суммирует результат со вторым элементом. Если lst — это число, оно добавляется к сумме. В остальных случаях функция вызывает себя для cdr списка. Оба куска кода выполняют одну и ту же задачу — находят сумму всех числовых атомов в списке, учитывая все атомы подсписков.

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


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

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

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