Scheme 方案函数作为参数

Scheme 方案函数作为参数,scheme,Scheme,该程序应该使用 (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 pro

该程序应该使用

(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))
您最终调用sum的方式是错误的,因为您调用sum时使用了
(harm term 1)
作为预期函数的参数<代码>(危害术语1)的计算结果明显为1

这意味着,当它稍后在sum中用作参数
f
时,它没有任何意义(即,您最终调用
(11)

你应该这样做:

(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

这解决了你的问题吗?