4 Stimmen

Schema und let-Syntax

 (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))))  

Dieser Code erzeugt einen Fehler r5rs:body: kein Ausdruck in body in: (r5rs:body) Könnten Sie bitte helfen?

1 Stimmen

Sie scheinen zu viele Klammern um Ihre Aussage zu setzen. Sie scheinen in der let-Zeile ausgeglichen zu sein, so dass die let-Anweisung geschlossen wird und die nächste define-Anweisung für sich alleine steht. Ich bin mir nicht sicher, ob Sie das anhand der Formatierung wollen.

6voto

Vlad Punkte 8776

Sie haben die Klammern nach der Zulassung verlegt. Nachdem Sie eine Konstante in let definiert haben, muss der Code, der die Konstante verwendet, innerhalb des Geltungsbereichs von let stehen. Daher Ihr Fehler, dass der Körper des Ausdrucks fehlt.

Hier ist der korrigierte 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, Sie müssen noch die Summenfunktion definieren.

0 Stimmen

Ich danke Ihnen! Sie haben mir eine Menge Zeit erspart. Es war mein erster let expression!! FYI, Für die Summe habe ich ;zwei Funktionen term und next verwendet, mit denen wir die Summe im ;Bereich a bis b berechnen können (define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (next a) next b))))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X