;; 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 factorial) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #f #t none explicit #f ()))) ; Berechne die Fakultät einer positiven ganzen Zahl (: factorial (natural -> natural)) (check-expect (factorial 1) 1) (check-expect (factorial 3) 6) (check-expect (factorial 5) 120) ; Fakultsberechnung als linearer rekursiver Prozess: #;(define factorial (lambda (n) (if (= n 1) 1 (* n (factorial (- n 1)))))) ; Fakultsberechnung als linearer iterativer Prozess: (define factorial (lambda (n) (fac-iter 1 1 n))) ; mit Zustandsvariablen Zähler, Zwischenprodukt, Maximum: (: fac-iter (natural natural natural -> natural)) (define fac-iter (lambda (cnt prod max) (if (> cnt max) prod (fac-iter (+ cnt 1) (* prod cnt) max))))