该程序应该使用
(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))
创建一个名为harm-sum
的函数,该函数计算谐波序列的总和。但我不断收到错误
应用程序:
not a procedure;
expected a procedure that can be applied to arguments
given: 3
arguments...:
求和函数。
答案 0 :(得分:2)
(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的方式是错误的,因为您使用(harm-term 1)
作为期望函数的参数来调用sum。 (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