Для начала, обратите внимание, что sum
процедуры получает четыре параметров, вы явно будете иметь использовать все из них в качестве части решения, в частности, эти две процедуры будут пчелы необходимы в каком-то момент. Вот что каждый из них представляет:
term
: функция применяется к каждому элементу последовательности
a
: стартовый номер диапазона (включительно)
next
: функцию, чтобы определить следующий элемент последовательности
b
: окончание число в диапазоне (включительно)
например, это, как вы бы проверить пр oceure с примером в вопросе:
(sum identity 1 add1 5)
=> 15
(= (sum identity 1 add1 5) (+ 1 2 3 4 5))
=> #t
Но подождите, как мы его реализуем? это для вас, чтобы обнаружить - он не будет делать вам никакой пользы, если мы дадим ответ сразу же, но я могу дать вам несколько подсказок:
(define (sum term a next b)
; internal procedure for implementing the iteration
; a : current number in the iteration
; result : accumulated sum so far
(define (iter a result)
(if (> a b) ; if we traversed the whole range
result ; then return the accumulated value
(iter ; else advance the iteration
?? ; what's the next value in the range?
(+ ; accumulate the result by adding
?? ; the current term in the range and
??)))) ; the accumulated value
; time to call the iteration
(iter ?? ; start iteration. what's the initial value in the range?
??)) ; what's the initial value of the sum?
Привет, извините, я относительно новичок в Схеме. Как мне вызвать функцию/выполнить действие? Спасибо! –
Посмотрите на ответ Оскара Лопеса; он объясняет каждый шаг очень, очень хорошо. –