1
0
mirror of https://github.com/2martens/uni.git synced 2026-05-06 19:36:26 +02:00

SE3-2: Kommentare ergänzt.

This commit is contained in:
Jim Martens
2013-11-10 10:27:25 +01:00
parent fd41c3f1f0
commit 64dcf05240

View File

@ -50,13 +50,16 @@ eval wird also mit 'peter aufgerufen; eval wertet damit das Symbol peter aus, we
(letrec ( (letrec (
; rekursive Hilfsfunktion ; rekursive Hilfsfunktion
(helper (λ (x) (helper (λ (x)
; 0! ergibt 1
(cond ([= 0 x] 1) (cond ([= 0 x] 1)
; ansonsten ergibt sich x! aus x*(x-1)!
(else (* x (helper (- x 1))) (else (* x (helper (- x 1)))
) )
) )
) )
) )
) )
; aufrufen der rekursiven Hilfsfunktion
(helper n) (helper n)
) )
) )
@ -66,10 +69,13 @@ eval wird also mit 'peter aufgerufen; eval wertet damit das Symbol peter aus, we
(letrec ( (letrec (
; rekursive Hilfsfunktion ; rekursive Hilfsfunktion
(helper (λ (x y) (helper (λ (x y)
; r⁰ ergibt immer 1
(cond ([= 0 y] 1) (cond ([= 0 y] 1)
; wenn y gerade ist, dann rechne (x^(y/2))²
([even? y] ([even? y]
(sqr (expt x (/ y 2))) (sqr (expt x (/ y 2)))
) )
; ansonsten rechne x*x^(y-1)
(else (else
(* (expt x (- y 1)) x) (* (expt x (- y 1)) x)
) )
@ -77,16 +83,22 @@ eval wird also mit 'peter aufgerufen; eval wertet damit das Symbol peter aus, we
) )
) )
) )
; aufrufen der rekursiven Hilfsfunktion
(helper r n) (helper r n)
) )
) )
; 2.3 ; 2.3
; berechnen des Limits hier aus Gründen der Optimierung
(define limit (power 10 1000))
(define e (define e
(letrec ( (letrec (
; rekursive Hilfsfunktion ; rekursive Hilfsfunktion
(helper (λ (x y) (helper (λ (x y)
(cond ([< x (/ 1 (power 10 1000))] 0) ; wenn x kleiner als 1/(10^1000) ist, breche ab
(cond ([< x (/ 1 limit)] 0)
; ansonsten addiere x mit dem Ergebnis aus einem weiteren Aufruf
; der Hilfsfunktion
(else (else
(+ x (helper (/ 1 (fakultaet (+ y 1))) (+ y 1) )) (+ x (helper (/ 1 (fakultaet (+ y 1))) (+ y 1) ))
) )
@ -94,7 +106,9 @@ eval wird also mit 'peter aufgerufen; eval wertet damit das Symbol peter aus, we
) )
) )
) )
(* (helper 1 0) (power 10 1001)) ; aufrufen der Hilfsfunktion und multiplizieren des Ergebnisses mit
; 10^1001
(* (helper 1 0) 10 limit)
) )
) )
@ -103,11 +117,15 @@ eval wird also mit 'peter aufgerufen; eval wertet damit das Symbol peter aus, we
(letrec ( (letrec (
; rekursive Hilfsfunktion ; rekursive Hilfsfunktion
(helper (λ (x plus?) (helper (λ (x plus?)
; wenn x größer ist als 22000, breche ab
(cond ([> x 22000] 0) (cond ([> x 22000] 0)
; andernfalls fahre fort
(else (else
; und addiere 1/x
(cond (plus? (cond (plus?
(+ (/ 1 x) (helper (+ x 2) #f)) (+ (/ 1 x) (helper (+ x 2) #f))
) )
; oder -1/x mit dem Ergebnis eines weiteren Aufrufs der Hilfsfunktion
(else (else
(+ (* -1 (/ 1 x)) (helper (+ x 2) #t)) (+ (* -1 (/ 1 x)) (helper (+ x 2) #t))
) )
@ -116,11 +134,14 @@ eval wird also mit 'peter aufgerufen; eval wertet damit das Symbol peter aus, we
) )
) )
)) ))
(* (* (helper 1 #t) 4) (power 10 1000)) ; aufrufen der Hilfsfunktion und anschließendes Multiplizieren mit
; 4 und 10^1000
(* (* (helper 1 #t) 4) limit)
) )
) )
; 3 ; 3
; Typbestimmung
(define (type-of input) (define (type-of input)
(cond ([boolean? input] 'boolean) (cond ([boolean? input] 'boolean)
([list? input] 'list) ([list? input] 'list)