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