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