rendered paste body(require (file "OO-pack.scm"))
;Aufgabe 1
(class (NumberGame)
(attribute rzahl)
(attribute tries)
(attribute won 0)
(method (init max-number max-tries) (set! rzahl (+ (random max-number) 1)) (set! tries max-tries))
(method (dec) (set! tries (- tries 1)))
(method (guess n)
(cond ((or (= won 1) (= tries 0)) 'game-already-over)
((> n rzahl) (send self dec) 'lower)
((< n rzahl) (send self dec) 'higher)
(else (set! won 1) 'correct))
)
(method (won?) (if (= won 1) '#t '#f))
(method (lost?) (if (and (= won 0) (= tries 0)) '#t '#f))
)
(define (create-NumberGame max-number max-tries)
(create-instance NumberGame max-number max-tries))
;(define ng (create-NumberGame 10 3))
;Aufgabe 2 a
(class (PlayerBase)
(attribute start)
(method (init max-number max-tries) (set! start (create-NumberGame max-number max-tries)))
(method (game) start)
(method (play) (send self make-turn)
(cond ((eq? (send start won?) '#t) '#t)
((eq? (send start lost?) '#t) '#f)
(else (send self play))
)
)
)
(define (create-PlayerBase max-number max-tries)
(create-instance PlayerBase max-number max-tries))
;(define pb (create-PlayerBase 10 3))
;Aufgabe 2 b
(class (RandomPlayer PlayerBase)
(attribute m-n)
(attribute m-t)
(attribute min 1)
(attribute max)
(method (init max-number max-tries) (send super init max-number max-tries) (set! m-n max-number) (set! m-t max-tries) (set! max m-n))
(method (make-turn) (let* ((obj (send self game))
(rzahl (+ (random m-n) 1))
;(rzahl (+ (random (+ 1 (- max min))) min)) ;;kommt aber nicht das gleiche ergebnis bei 2c raus, wie es aufm zettel steht
(ergebnis (send obj guess rzahl)))
(cond ((eq? ergebnis 'higher) (set! min (+ rzahl 1)))
((eq? ergebnis'lower) (set! max (- rzahl 1)))
)
)
)
)
(define (create-RandomPlayer max-number max-tries)
(create-instance RandomPlayer max-number max-tries))
;(define rp (create-RandomPlayer 10 3))
(class (BinaryPlayer PlayerBase)
(attribute m-n)
(attribute m-t)
(attribute min 1)
(attribute max)
(method (init max-number max-tries) (send super init max-number max-tries) (set! m-n max-number) (set! m-t max-tries) (set! max m-n))
(method (make-turn) (let* ((obj (send self game))
(rzahl (quotient (+ max min) 2))
(ergebnis (send obj guess rzahl)))
(cond ((eq? ergebnis 'higher) (set! min (+ rzahl 1)))
((eq? ergebnis 'lower) (set! max (- rzahl 1)))
)
)
)
)
(define (create-BinaryPlayer max-number max-tries)
(create-instance BinaryPlayer max-number max-tries))
;Aufgabe 2 c
(define (compete times max-number max-tries)
(define (iter times2 wons-bin wons-rand)
(if (> times2 0) (iter (- times2 1) (if (send (create-BinaryPlayer max-number max-tries) play)
(+ wons-bin 1)
wons-bin)
(if (send (create-RandomPlayer max-number max-tries) play) (+ wons-rand 1) wons-rand)
)
(* 1.0 (/ (- wons-bin wons-rand) (+ wons-bin wons-rand)))
)
)
(iter times 0 0)
)
(compete 1000 200 7)
;0.903225806451613
;AUFGABEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 2 d
;RandomPlayer hat als O-Klasse n
;BinaryPlayer hat als O-Klasse log(n)
;Aufgabe 3 a
(define (fun-with-set-1 l)
(define (help l r)
(if (null? l) r
(let ((temp (cdr l)))
(set-cdr! l r)
(help temp l))))
(help l '()))
(define a '(2 3 5 7))
(define b (fun-with-set-1 a))
;Aufgabe 3 b
(define (fun-with-set-2 l)
(define (help r)
(if (null? (cdr r)) (set-cdr! r l)
(help (cdr r))))
(help l))
;;(define (hello l)
;; (if (null? l) (display "Hello!")
;; (hello (cdr l))))
;;(define c ’(6 2 9 3 5))
;;(fun-with-set-2 c)
;;(hello c)