该程序应该使用
(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...:
用于总和函数。
(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-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