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

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

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

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

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

textual
Листинг программы
;; racket-lang.org
(define (foo lst)
  (apply + (filter number? (flatten lst))))
 
;; racket way
(define (bar lst)
  (for/fold ([ sum 0])
            ([i (in-list (flatten lst))])
    (match i
      [(? number? x) (+ sum x)]
      [_ sum])))
 
 
(let ((lst '(1 2 (((3))) (4 a ((b)) 5 (((6 7)))) 8)))
  (map (lambda (f) (f lst)) `(,foo ,bar)))
;'(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
Похожие ответы