Список сумм первых n элементов исходного списка - Lisp
Формулировка задачи:
Решение задачи: «Список сумм первых n элементов исходного списка»
- (defn foo1 (l) (
- (defn go (l s) (cond (null? l) nil (cons (+ s (car l)) (go (cdr l) (+ s (car l))))))
- (go l 0)))
- (defn foo2 (l) (
- (defn go (l s r) (cond (null? l) r (go (cdr l) (+ s (car l)) (cons (+ s (car l)) r))))
- (reverse (go l 0 nil))))
- (defn foo3 (l) (
- (def s 0)
- (defn f (x a) (begun (set! s (+ s x)) (cons s a)))
- (reverse (foldl f nil l))))
- (def l (cons 3 (cons 2 (cons 6 (cons 5 1)))))
- (print (str входящий список: l))
- (print результаты:)
- (str foo1: (foo1 l) foo2: (foo2 l) foo3: (foo3 l))
Объяснение кода листинга программы
В этом коде представлены три функции, которые выполняют одно и то же: подсчитывают сумму элементов списка. Разница заключается в том, как они это делают. foo1: Использует рекурсию для обхода списка. Если список пуст, возвращает nil. Если не пуст, то добавляет первый элемент к сумме и вызывает функцию go для оставшейся части списка. foo2: Также использует рекурсию для обхода списка. Если список пуст, возвращает исходную сумму. Если не пуст, то добавляет первый элемент к сумме и вызывает функцию go для оставшейся части списка. foo3: Использует итерацию для обхода списка. Создаёт переменную s, которая инициализируется нулём. Функция f принимает два аргумента: x и a. Если x равно нулю, то a добавляется к сумме и возвращается. Если x не равно нулю, то a добавляется к сумме, значение переменной s обновляется, и возвращается новая сумма. В конце применяется функция reverse для получения обратного списка результатов. Пример использования: Создаётся список l, содержащий 3, 2, 6, 5, 1. Вызывается функция foo3 с этим списком. Результатом будет список, содержащий 15, потому что сумма элементов исходного списка равна 15. (def l (cons 3 (cons 2 (cons 6 (cons 5 1)))))) (print (str входящий список: l)) (print результаты:) (str foo1: (foo1 l) foo2: (foo2 l) foo3: (foo3 l)) Вывод: Входящий список: (3 2 6 5 1) Результаты: foo1: nil foo2: 15 foo3: (15)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д