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

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

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

описать функцию, которая находила бы сумму всех числовых элементов в списке. Список может содержать подсписки произвольной глубины.

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

textual
Листинг программы
  1. ;; racket-lang.org
  2. (define (foo lst)
  3.   (apply + (filter number? (flatten lst))))
  4.  
  5. ;; racket way
  6. (define (bar lst)
  7.   (for/fold ([ sum 0])
  8.             ([i (in-list (flatten lst))])
  9.     (match i
  10.       [(? number? x) (+ sum x)]
  11.       [_ sum])))
  12.  
  13.  
  14. (let ((lst '(1 2 (((3))) (4 a ((b)) 5 (((6 7)))) 8)))
  15.   (map (lambda (f) (f lst)) `(,foo ,bar)))
  16. ;'(36 36)

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

В коде определены две функции для нахождения суммы всех числовых элементов в списке. Функция foo использует функцию filter для отфильтрованного списка числовых элементов, а затем применяет apply для суммирования. Функция bar использует цикл for/fold, который итерирует по каждому элементу во входном списке. Если элемент является числом, он добавляет его к сумме. В конце кода, функция map применяется к списку функций foo и bar, чтобы вызвать их с входным списком (1 2 (((3))) (4 a ((b)) 5 (((6 7)))) 8). Результатом работы кода является (36 36), что означает, что сумма всех числовых элементов в списке равна 36.

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


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

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

11   голосов , оценка 3.818 из 5

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

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

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