【发布时间】:2013-05-29 02:36:28
【问题描述】:
我目前正在做 SICP 的练习 1.29,我的程序不断给我以下错误:
+: expects type <number> as 2nd argument, given: #<void>; other arguments were: 970299/500000
这是我使用 racket 运行的代码:
(define (cube x)
(* x x x))
(define (integral2 f a b n)
(define (get-mult k)
(cond ((= k 0) 1)
((even? k) 4)
(else 2)))
(define (h b a n)
(/ (- b a) n))
(define (y f a b h k)
(f (+ a (* k (h b a n)))))
(define (iter f a b n k)
(cond ((> n k)
(+ (* (get-mult k)
(y f a b h k))
(iter f a b n (+ k 1))))))
(iter f a b n 0))
(integral2 cube 0 1 100)
我猜“第二个参数”是指我添加当前迭代和未来迭代的地方。但是,我不明白为什么第二个参数没有返回数字。有谁知道如何解决这个错误?
【问题讨论】:
-
最好是你提供的代码是独立的,所以你应该包含
cube的定义,这样你的例子就可以运行了。 -
h 是一个常数,并在包含所需 a b 和 n 值的闭包中定义。您的定义可以重写为不使用任何参数。 y 只需要 k,iter 只需要 k 和 n。您忘记了迭代中 n=k 的情况,并且您忘记了算法的 (* (/h 3) sum-terms) 部分