4
votes
 (define (Integral f a b N)  
    ;define h as a constant
    (let((h (/ (- b a) N))))       
     (define (Term n)   
      (* (/ h 3) (+ (* 2 (f (+ a (* 2 (* n h)))))   
            (* 4 (f (+ a (* 2 (* (- n 1) h)))))  
            )  
     ))  
     (+ (* (/ h 3) (+ (f a) (f b))) (sum Term a next (/ N 2.0))))  

This code produces an error r5rs:body: no expression in body in: (r5rs:body) Could you please help?

1
You appear to have too many parenthesis around your let statement. They appear to be balanced on the let line so that would close the let statement leaving the next define to standalone. I'm not sure if that's what you want based on the formatting.chollida

1 Answers

6
votes

You misplaced the braces after the let. After you defined a constant in let the code that uses the constant has to be inside of the let's scope. Hence your error about missing the body of the expression.

Here is the corrected code:

(define (Integral f a b N)
  ; define h as a constant
  (let ((h (/ (- b a) N)))
    (define (Term n)
      (* (/ h 3) (+ (* 2 (f (+ a (* 2 (* n h)))))
                    (* 4 (f (+ a (* 2 (* (- n 1) h))))))))

    (+ (* (/ h 3) (+ (f a) (f b))) (sum Term a next (/ N 2.0)))))

BTW, you still need to define the sum function.