Я думаю, вы довольно близки к решению. На вашем месте я бы определил еще две вспомогательные функции как внутренние определения buildseries
. Одной из них будет identity
функция, которая просто возвращает свой аргумент без изменений. Другой будет вспомогательная функция compose
, которая принимает две функции f
и g
и возвращает новую функцию, которая вычисляет их композицию. Это будет выглядеть примерно так, как ваши a
и m
помощники, которые также являются "фабриками функций", возвращающими анонимную функцию, которая зависит от их аргумента. Вы можете подумать о переводе следующей математической нотации, используя .
для представления композиции функций, в Scheme: (f . g)(x) = f(g(x))
.
Кстати, я думаю, что ваше определение s
не совсем верно: это не должна быть «фабрика функций», которая возвращает лямбда, а просто простая функция x
. будет работать так, как написано, но поскольку вы ничего не делаете с (внешним) аргументом x
, вы можете упростить его до (define (s x) (* x x))
. Тогда в вашем (= d 0)
случае вы можете просто вернуть s
, что само по себе является очень хорошим значением функции.
Теперь вам нужно подумать о двух вещах. Во-первых, каков ваш базовый случай? Какую функцию вы возвращаете, когда список l
пуст? Далее, когда l
не пусто, как вы будете комбинировать все, что вы делаете с элементом first
списка, с тем, что вы делаете, рекурсивно, с rest
списка?
Надеюсь, это полезно. Дайте мне знать, если я смогу улучшить ответ!