All pastes #825821 Raw Edit

Meins

public text v1 · immutable
#825821 ·published 2007-12-20 20:42 UTC
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)