Описать функцию, которая находила бы сумму всех числовых элементов в списке - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д