(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)