方案函数作为参数



该程序应该使用

(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

最新更新