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:
@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user