(define (sum f n)
(if (= n 0)
(f 1)
(+ (f n) (sum f (- n 1)))))
(define (harm-term k)
(/ 1 k))
(define (harm-sum n)
(sum (harm-term 1) n))
Способ, которым вы в конечном итоге вызываете sum, неверен, потому что вы вызываете sum с (harm-term 1)
в качестве параметра, для которого вы ожидаете функцию.(harm-term 1)
однозначно оценивается как 1.
Это означает, что когда он используется позже в сумме в качестве параметра f
, это не имеет смысла (т.е. вы в конечном итоге вызываете (1 1)
)
Вы должны делать что-то вроде этого:
(define (sum f n)
(if (= n 0)
(f 1)
(+ (f n) (sum f (- n 1)))))
(define (harm-term k)
(/ 1 k))
(define (harm-sum n)
(sum harm-term n)) ; the difference is the function itself is passed instead of the value the function returns for 1