;; 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 Zahl (: factorial (natural -> natural)) (check-expect (factorial 0) 1) (check-expect (factorial 1) 1) (check-expect (factorial 4) 24) ; Linearer rekursiver Prozess #;(define factorial (lambda (n) (if (= n 0) 1 (* n (factorial (- n 1)))))) ; Linearer iterativer Prozess mit Zustandsvariable: ; Zähler, Produkt, Maximum (define factorial (lambda (n) (fac-iter 1 1 n))) (: fac-iter (natural natural natural -> natural)) (define fac-iter (lambda (cnt prod max) (if (> cnt max) prod (fac-iter (+ cnt 1) (* prod cnt) max)))) (factorial 4)