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

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

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

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

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

textual
Листинг программы
  1. (defun sum-num (lst)
  2.   (apply '+ (mapcar (lambda (x) (if (listp x) (sum-num x) (if (numberp x) x 0))) lst)))
  3.  
  4. ==> SUM-NUM
  5.  
  6. (sum-num '(1 2 a b (3 4 (f g 5 6))))
  7.  
  8. ==> 21
  9.  
  10. (defun sum-num (lst)
  11.   (cond ((null lst) 0)
  12.         ((listp (car lst)) (+ (sum-num (car lst)) (sum-num (cdr lst))))
  13.         ((numberp (car lst)) (+ (car lst) (sum-num (cdr lst))))
  14.         (t (sum-num (cdr lst)))))
  15.  
  16. ==> SUM-NUM
  17.  
  18. (sum-num '(1 2 a b (3 4 (f g 5 6))))
  19.  
  20. ==> 21

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

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

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


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

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

8   голосов , оценка 4.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы