mirror of https://github.com/2martens/uni.git
SE3-2: Blatt 2 komplett bearbeitet.
This commit is contained in:
parent
b676b39db5
commit
3d0479ad69
|
@ -0,0 +1,154 @@
|
||||||
|
#lang racket
|
||||||
|
|
||||||
|
#|
|
||||||
|
SE 3 Funktional Blatt 2
|
||||||
|
Abgebende: Jim 2martens, Britta 2noack, Jan-Simon 0giesel
|
||||||
|
|#
|
||||||
|
|
||||||
|
; 1) Definitionen
|
||||||
|
(define miau 'Katze)
|
||||||
|
(define plueschi miau)
|
||||||
|
(define peter 'miau)
|
||||||
|
(define (welcherNameGiltWo PersonA PersonB)
|
||||||
|
(let ((PersonA 'Sam)
|
||||||
|
(PersonC PersonA))
|
||||||
|
PersonC))
|
||||||
|
(define xs1 '(0 1 2 miau plueschi))
|
||||||
|
(define xs3 (list miau plueschi))
|
||||||
|
(define xs2 (cons plueschi miau))
|
||||||
|
|
||||||
|
#| 1. zu 'Katze, da miau als 'Katze definiert wurde
|
||||||
|
2. zu 'Katze, da plueschi als miau definiert wurde,
|
||||||
|
welches als 'Katze definiert wurde
|
||||||
|
bei der Ausführung werden Symbole so lange ausgewertet, bis ein ' auftaucht
|
||||||
|
oder eine Zahl/ein String
|
||||||
|
3. zu 'miau, da peter als 'miau definiert wurde und ' die Auswertung von miau verhindert
|
||||||
|
4. zu 'plueschi, da die Funktion quote das Symbol selbst ohne Auswertung zurückgibt
|
||||||
|
5. zu 'Katze, da eval den Inhalt von peter auswertet, welcher das Symbol miau ist
|
||||||
|
6. wirft Fehler, da kein Symbol Katze definiert wurde, eben dieses aber in miau als Inhalt steht
|
||||||
|
durch eval wird nun versucht den Inhalt von miau auszuwerten, also den Inhalt von Katze zu finden
|
||||||
|
das geschieht, weil vor Ausführung von eval bereits plueschi zu 'Katze ausgewertet wird
|
||||||
|
7. zu 'Katze, da nun das Symbol plueschi selbst ausgewertet wird durch eval, was miau und damit 'Katze ergibt
|
||||||
|
8. zu 'Ich, da das Symbol Ich den Wert 'Sam zugewiesen bekommt und PersonC den Wert 'Ich
|
||||||
|
bei der anschließenden Rückgabe von PersonC wird daher 'Ich zurückgegeben
|
||||||
|
9. zu '(miau plueschi), da die ersten drei Listenglieder durch cdddr entfernt werden
|
||||||
|
und nur die verbleibende Liste zurückgegeben wird
|
||||||
|
10. zu 'Katze, da (cons plueschi miau) ein Paar mit den Werten 'Katze und 'Katze erzeugt
|
||||||
|
cdr gibt nun das zweite Element zurück
|
||||||
|
11. zu '(Katze), da (list plueschi miau) eine Liste '('Katze 'Katze) erzeugt
|
||||||
|
cdr schneidet das erste Element ab und gibt die verbleibende Liste zurück
|
||||||
|
12. zu 0.1411200080598672, da zunächst der Sinus von 3 berechnet wird
|
||||||
|
und eval einer Zahl eben diese zurückgibt
|
||||||
|
13. zu 'peter, da der Aufruf von welcherNameGiltWo 'peter zurückgibt
|
||||||
|
eval wird also mit ''peter aufgerufen; die Auswertung durch eval ergibt daher 'peter
|
||||||
|
14. zu 'miau, da der Aufruf von welcherNameGiltWo 'peter zurückgibt
|
||||||
|
eval wird also mit 'peter aufgerufen; eval wertet damit das Symbol peter aus, welches den Wert 'miau hat
|
||||||
|
|#
|
||||||
|
|
||||||
|
; 2.1
|
||||||
|
(define (fakultaet n)
|
||||||
|
(letrec (
|
||||||
|
; rekursive Hilfsfunktion
|
||||||
|
(helper (λ (x)
|
||||||
|
(cond ([= 0 x] 1)
|
||||||
|
(else (* x (helper (- x 1)))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(helper n)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
; 2.2
|
||||||
|
(define (power r n)
|
||||||
|
(letrec (
|
||||||
|
; rekursive Hilfsfunktion
|
||||||
|
(helper (λ (x y)
|
||||||
|
(cond ([= 0 y] 1)
|
||||||
|
([even? y]
|
||||||
|
(sqr (expt x (/ y 2)))
|
||||||
|
)
|
||||||
|
(else
|
||||||
|
(* (expt x (- y 1)) x)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(helper r n)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
; 2.3
|
||||||
|
(define e
|
||||||
|
(letrec (
|
||||||
|
; rekursive Hilfsfunktion
|
||||||
|
(helper (λ (x y)
|
||||||
|
(cond ([< x (/ 1 (power 10 1000))] 0)
|
||||||
|
(else
|
||||||
|
(+ x (helper (/ 1 (fakultaet (+ y 1))) (+ y 1) ))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(* (helper 1 0) (power 10 1001))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
; 2.4
|
||||||
|
(define my-pi
|
||||||
|
(letrec (
|
||||||
|
; rekursive Hilfsfunktion
|
||||||
|
(helper (λ (x plus?)
|
||||||
|
(cond ([> x 22000] 0)
|
||||||
|
(else
|
||||||
|
(cond (plus?
|
||||||
|
(+ (/ 1 x) (helper (+ x 2) #f))
|
||||||
|
)
|
||||||
|
(else
|
||||||
|
(+ (* -1 (/ 1 x)) (helper (+ x 2) #t))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
))
|
||||||
|
(* (* (helper 1 #t) 4) (power 10 1000))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
; 3
|
||||||
|
(define (type-of input)
|
||||||
|
(cond ([boolean? input] 'boolean)
|
||||||
|
([pair? input] 'pair)
|
||||||
|
([list? input] 'list)
|
||||||
|
([symbol? input] 'symbol)
|
||||||
|
([number? input] 'number)
|
||||||
|
([char? input] 'char)
|
||||||
|
([string? input] 'string)
|
||||||
|
([vector? input] 'vector)
|
||||||
|
([procedure? input] 'procedure)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
; Ausgaben
|
||||||
|
(display "(type-of (+ 3 7)): ")
|
||||||
|
(type-of (+ 3 7))
|
||||||
|
(display "(type-of type-of): ")
|
||||||
|
(type-of type-of)
|
||||||
|
(display "(type-of (type-of type-of)): ")
|
||||||
|
(type-of (type-of type-of))
|
||||||
|
(display "(type-of (string-ref \"Schneewitchen_und_die_7_Zwerge\" 2)): ")
|
||||||
|
(type-of (string-ref "Schneewitchen_und_die_7_Zwerge" 2))
|
||||||
|
(display "(type-of (lambda (x) x)): ")
|
||||||
|
(type-of (lambda (x) x))
|
||||||
|
(define (id z) z)
|
||||||
|
(display "(type-of (id cos)): ")
|
||||||
|
(type-of (id cos))
|
||||||
|
(display "(type-of '(1 2 3)): ")
|
||||||
|
(type-of '(1 2 3))
|
||||||
|
(display "(type-of '()): ")
|
||||||
|
(type-of '())
|
Loading…
Reference in New Issue