;; 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-vanilla-reader.ss" "deinprogramm")((modname natural_plus) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #f #t none explicit #f ()))) ; wir benutzen die eingebaute Sorte natural und definieren zero, ;succ, pred, tun aber danach so, als gaebe es + und - noch nicht ; Konstruktor für Null (: zero natural) (define zero 0) ; Konstruktor für Nachfolger (: succ (natural -> natural)) (define succ (lambda (x) (+ x 1))) ; Selektor (: posnat (natural -> boolean)) ;Hilfsprädikat (define posnat (lambda (n) (positive? n))) (: pred ((predicate posnat) -> natural)) (define pred (lambda (x) (- x 1))) ;plus: zwei natürliche Zahlen addieren (: plus (natural natural -> natural)) (check-expect (plus zero zero) zero) (check-expect (plus (succ zero) zero) (succ zero)) (check-expect (plus (succ (succ (succ zero))) (succ (succ zero))) (succ (succ (succ (succ (succ zero)))))) ;plus: Rekursion auf dem ersten Argument #;(define plus (lambda (n m) (if (zero? n) ... (... (plus (pred n) m) ...) ))) #;(define plus (lambda (n m) (if (zero? n) m (succ (plus (pred n) m)) ))) ;plus: Rekursion auf dem zweiten Argument #;(define plus (lambda (n m) (if (zero? m) n (succ (plus n (pred m))) ))) ;Rekursion auf beiden Argumenten #;(define plus (lambda (n m) (if (zero? n) ... ... ) )) #;(define plus (lambda (n m) (if (zero? n) (if (zero? m) ... ... ) (if (zero? m) ... ... ) ) )) #;(define plus (lambda (n m) (if (zero? n) (if (zero? m) zero m ) (if (zero? m) n ... ) ) )) #;(define plus (lambda (n m) (if (zero? n) (if (zero? m) zero m ) (if (zero? m) n (... (plus (pred n) (pred m)) ...) ) ) )) #;(define plus (lambda (n m) (if (zero? n) (if (zero? m) zero m) (if (zero? m) n (succ (succ (plus (pred n) (pred m)))) ) ) )) ;Vereinfachung (define plus (lambda (n m) (if (zero? n) m (if (zero? m) n (succ (succ (plus (pred n) (pred m)))) ) ) )) ;für plus gehen alle drei Methoden sehr gut