Frage

Ich mache ein paar Hausaufgaben, schrieb einige code und kann eigentlich nicht finden, der Grund, warum es nicht funktioniert.Der Grundgedanke dieser Teil der Arbeit ist, um einen Strom, der mir Elemente der Taylor Serie Cosinus-Funktion für einen gegebenen X - (Winkel, denke ich).sowieso, hier ist mein code, ich würde mich freuen, wenn jemand könnte mir die Gründe, warum es nicht funktioniert :)

(define (force exp) exp)
(define (s-car s) (car s))
(define (s-cdr s) (force (cdr s)))

; returns n elements of stream s as a list
(define (stream->list s n)
  (if (= n 0) 
      '()
      (cons (s-car s) (stream->list (s-cdr s) (- n 1)))))

; returns the n-th element of stream s
(define stream-ref (lambda (s n)
                     (if (= n 1)
                         (s-car s)
                         (stream-ref (s-cdr s) (- n 1)))))

; well, the name kinda gives it away :) make factorial n!
(define (factorial x)
        (cond ((= x 0) 1)
              ((= x 1) 1)
              (else (* x (factorial (- x 1))))))

; this function is actually the equation for the 
; n-th element of Taylor series of cosine
(define (tylorElementCosine x)
  (lambda (n)
     (* (/ (expt -1 n) (factorial (* 2 n))) (expt x (* 2 n)))))

; here i try to make a stream of those Taylor series elements of cosine
(define (cosineStream x)
  (define (iter n)
    (cons ((tylorElementCosine x) n)
          (lambda() ((tylorElementCosine x) (+ n 1)))))
  (iter 0))

; this definition should bind cosine
; to the stream of taylor series for cosine 10
(define cosine (cosineStream 10)) 
(stream->list cosine 10) 
; this should printi on screen the list of first 10 elements of the series

Aber so funktioniert das nicht, und ich weiß nicht, warum.

Ich bin mit Dr. Schema 4.2.5 mit der Sprache "Essentials of Programming Languages, 3rd ed -".

War es hilfreich?

Lösung

Da ich das Gefühl war schön (und nostalgisch über Schema), die ich eigentlich wateten durch den code zu finde den Fehler.Von dem, was ich sehen kann, gibt es 2 Probleme, die hält den code ausgeführt, wie es sollte:

Wenn ich sehe, dass Ihr code korrekt (force exp) sollten bewerten exp, jedoch Sie direkt zurücksenden (ungewichtete).So wird es wahrscheinlich sein sollte definiert als (define (force exp) (exp))

Das zweite problem ist in Ihren lambda: (lambda() ((tylorElementCosine x) (+ n 1)) ) bewerten Sie zum nächsten element der taylor-Reihe, während es einschätzen soll, an einen stream.Sie wollen wahrscheinlich so etwas wie diese: (lambda() (iter (+ n 1)) )

Ich habe nicht geprüft, ob die Ausgabe korrekt ist, aber mit den änderungen nicht tut es zumindest laufen.Also, wenn es irgendwelche Probleme mehr mit dem code das sollte in der Formel verwendet.

Aber ich würde vorschlagen, dass das nächste mal, wenn Sie wollen, helfen Sie bei Ihren Hausaufgaben, die Sie zumindest uns sagen, wo genau das problem äußert und was Sie bereits versucht (die Gemeinschaft ist missbilligen "hier ist ein code, please fix it for me" Art von Fragen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top