;; 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 exp) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #f #t none explicit #f ()))) ; Berechne die n-te Potenz einer Zahl (: expnt (number natural -> number)) (check-expect (expnt 3 0) 1) (check-expect (expnt 0 12) 0) (check-expect (expnt 2 8) 256) ; Linearer rekursiver Prozess: #;(define expnt (lambda (b n) (if (= n 0) 1 (* b (expnt b (- n 1)))))) ; Linearer iterativer Prozess: #;(define expnt (lambda (b n) (expnt-iter b n 1))) (: expnt-iter (number natural number -> number)) (define expnt-iter (lambda (b cnt p) (if (= cnt 0) p (expnt-iter b (- cnt 1) (* b p))))) ; mit Quadratbildung: (define expnt (lambda (b n) (cond ((= n 0) 1) ((even? n) (square (expnt b (/ n 2)))) (else (* b (expnt b (- n 1))))))) (define square (lambda (x) (* x x)))