;; Die ersten drei Zeilen dieser Datei wurden von DrRacket eingefügt. Sie enthalten Metadaten ;; über die Sprachebene dieser Datei in einer Form, die DrRacket verarbeiten kann. #reader(lib "DMdA-beginner-reader.ss" "deinprogramm")((modname morecookies) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #f #t none explicit #f ()))) (: simple-choc chocolate-cookie) (define simple-choc (make-chocolate-cookie 10 12)) (define double-choc (make-chocolate-cookie 20 12)) ; Gewicht eines Schokokekses bestimmen (: chocolate-cookie-weight (chocolate-cookie -> real)) (check-expect (chocolate-cookie-weight simple-choc) 22) (check-expect (chocolate-cookie-weight double-choc) 32) #;(define chocolate-cookie-weight (lambda (c) ...(chocolate-cookie-chocolate c) ... ...(chocolate-cookie-cookie c)...)) (define chocolate-cookie-weight (lambda (c) (+ (chocolate-cookie-chocolate c) (chocolate-cookie-cookie c)))) ; Aus einem Keks einen Keks mit doppelten Schoko-Anteil erzeugen (: double-chocolate-in-cookie (chocolate-cookie -> chocolate-cookie)) (check-expect (double-chocolate-in-cookie simple-choc) double-choc) #;(define double-chocolate-in-cookie (lambda (c) ...(chocolate-cookie-chocolate c) ... ...(chocolate-cookie-cookie c)...)) #;(define double-chocolate-in-cookie (lambda (c) (make-chocolate-cookie ...(chocolate-cookie-chocolate c) ... ...(chocolate-cookie-cookie c)...))) (define double-chocolate-in-cookie (lambda (c) (make-chocolate-cookie (* 2 (chocolate-cookie-chocolate c)) (chocolate-cookie-cookie c)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Eine Marmelade-Creme-Keks besteht aus ; - einem Marmeladen-Anteil (real) ; - einem Creme-Anteil (real) ; - einem Keks-Anteil (real) (define-record-procedures jelly-cream-cookie make-jelly-cream-cookie jelly-cream-cookie? (jelly-cream-cookie-jelly jelly-cream-cookie-cream jelly-cream-cookie-cookie)) (: make-jelly-cream-cookie (real real real -> jelly-cream-cookie)) (: jelly-cream-cookie? (any -> boolean)) (: jelly-cream-cookie-jelly (jelly-cream-cookie -> real)) (: jelly-cream-cookie-cream (jelly-cream-cookie -> real)) (: jelly-cream-cookie-cookie (jelly-cream-cookie -> real)) (define simple-jelly-cream (make-jelly-cream-cookie 10 10 12)) (define double-jelly-cream (make-jelly-cream-cookie 15 20 12)) ; Bestimme das Gewicht eines Marmeladen-Creme-Kekses (: jelly-cream-cookie-weight (jelly-cream-cookie -> real)) (check-expect (jelly-cream-cookie-weight simple-jelly-cream) 32) (check-expect (jelly-cream-cookie-weight double-jelly-cream) 47) #;(define jelly-cream-cookie-weight (lambda (c) ...)) #;(define jelly-cream-cookie-weight (lambda (c) ...(jelly-cream-cookie-jelly c) ... ...(jelly-cream-cookie-cream c)... ...(jelly-cream-cookie-cookie c)...)) (define jelly-cream-cookie-weight (lambda (c) (+ (jelly-cream-cookie-jelly c) (jelly-cream-cookie-cream c) (jelly-cream-cookie-cookie c)))) ; Ein Keks (cookie) ist eins der Folgenden: ; - ein Schokokeks (chocolate-cookie) ; - ein Marmeladen-Creme-Keks (jelly-cream-cookie) ; Signatur: cookie (define cookie (signature (mixed chocolate-cookie jelly-cream-cookie))) ; Gewicht eines Kekses bestimmen (: cookie-weight (cookie -> real)) (check-expect (cookie-weight simple-choc) 22) (check-expect (cookie-weight double-choc) 32) (check-expect (cookie-weight simple-jelly-cream) 32) (check-expect (cookie-weight double-jelly-cream) 47) #;(define cookie-weight (lambda (c) ...)) #;(define cookie-weight (lambda (c) (cond ((chocolate-cookie? c) ...) ((jelly-cream-cookie? c) ...)))) (define cookie-weight (lambda (c) (cond ((chocolate-cookie? c) (chocolate-cookie-weight c)) ((jelly-cream-cookie? c) (jelly-cream-cookie-weight c)))))