Я не уверен, является ли это домашним заданием или нет, но в любом случае я дам вам несколько идей о том, как ее решить. Для простоты предположим, что наша задача - найти сумму квадратов всех чисел между j и k. Вы можете использовать свою функцию накопления выше, чтобы решить эту простую проблему. Все, что вам нужно сделать, это определить свой комбинатор, термин и следующие функции для этой задачи, а также определить окончательное нулевое значение.
Термин функция здесь должен вычислять квадраты для каждого j. Следовательно, term примет j в качестве аргумента и вернет квадрат j в качестве результата.
(определить (термин j) (sqr j))
Следующая функция должна получить следующий j в последовательности.
(определить (далее j) (+ j 1)
Функция объединителя должна объединять два термина вместе.
(определить (объединитель t1 t2) (+ t1 t2))
Наконец, нулевое значение означает условие остановки, последнее значение, которое должно быть передано объединителю, когда мы накопили все значения от j до k. Все, что нам нужно сделать, это просто определить его как ноль в этом случае.
(определить нулевое значение 0)
В вашей задаче большинство этих функций одинаковы, за исключением термина «функция».
В этой задаче термин функция был очень простым, он просто нашел квадрат предоставленного числа. Однако в вашем случае это не так просто, как найти квадрат j, так как у вас есть несколько других определенных констант.
Надеюсь, это поможет вам решить проблему.
Если вам нужно еще больше разобраться в этом, вы можете взглянуть на накопившиеся проблемы в главе 2 SICP.