;; 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 rat) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #f #t none explicit #f ()))) ; Modulkopf: (provide rat make-rat rat? rat-numerator rat-denominator +rat *rat) ; Eine rationale Zahl besteht aus ; - einen Zähler (integer) ; - einen Nennner (integer) (define-record-procedures rat ; Name der neuen Struktur make-rat-record ; Name des Konstruktor rat? ; Name des Prädikats (rat-numerator rat-denominator)) ; Namen der Selektoren (: make-rat-record (integer integer -> rat)) (: rat? (any -> boolean)) (: rat-numerator (rat -> integer)) (: rat-denominator (rat -> integer)) ; Konstruktor für gekürzte Brüche: (: make-rat (integer integer -> rat)) (define make-rat (lambda (x y) (make-rat-record (/ x (gcd x y)) (/ y (gcd x y))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define one-third (make-rat 1 3)) (define two-third (make-rat 2 3)) (define one-ninth (make-rat 1 9)) ; Berechne das Produkt zweiter rationaler Zahlen (: *rat (rat rat -> rat)) (check-expect (*rat one-third one-third) one-ninth) #;(define *rat (lambda (r1 r2) ...)) ; Zusammengesetzte Daten als Eingabe: #;(define *rat (lambda (r1 r2) ...(rat-numerator r1) ... (rat-denominator r1)... ...(rat-numerator r2) ... (rat-denominator r2)...)) ; Zusammengesetzte Daten als Ausgabe: #;(define *rat (lambda (r1 r2) (make-rat ...(rat-numerator r1) ... (rat-denominator r1)... ...(rat-numerator r2) ... (rat-denominator r2)...))) ; Mathematischen Gesetze: (define *rat (lambda (r1 r2) (make-rat (* (rat-numerator r1) (rat-numerator r2)) (* (rat-denominator r1) (rat-denominator r2))))) ; Berechne die Summe zweier rationaler Zahlen (: +rat (rat rat -> rat)) (check-expect (+rat one-third one-third) two-third) #;(define +rat (lambda (r1 r2) (make-rat ...(rat-numerator r1) ... (rat-denominator r1)... ...(rat-numerator r2) ... (rat-denominator r2)...))) ; Mathematischen Gesetze: (define +rat (lambda (r1 r2) (make-rat (+ (* (rat-numerator r1) (rat-denominator r2)) (* (rat-numerator r2) (rat-denominator r1))) (* (rat-denominator r1) (rat-denominator r2)))))