;; 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 sum) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #f #t none explicit #f ()))) ; Berechne die Summe aller Zahlen zwischen zwei Grenzen (: num-sum (integer integer -> integer)) (define num-sum (lambda (a b) (if (> a b) 0 (+ a (num-sum (+ a 1) b))))) ; Berechne die Summe der Quadratzahlen zwischen zwei Grenzen (: sq-sum (integer integer -> integer)) #;(define sq-sum (lambda (a b) (if (> a b) 0 (+ (square a) (sq-sum (+ a 1) b))))) ; Berechne eine Näherungslösung für pi/8 als Summe (: pi-sum (integer integer -> real)) #;(define pi-sum (lambda (a b) (if (> a b) 0 (+ (/ 1 (* a (+ a 2))) (pi-sum (+ a 4) b))))) ; Allgemeine Struktur der Intervallsummierung: (: sum ((integer -> number) (integer -> integer) integer integer -> number)) (define sum (lambda (fun next a b) (if (> a b) 0 (+ (fun a) (sum fun next (next a) b))))) (: inc (integer -> integer)) (define inc (lambda (n) (+ n 1))) (define sq-sum (lambda (a b) (sum square inc a b))) (: pi-fun (integer -> number)) (define pi-fun (lambda (x) (/ 1 (* x (+ x 2))))) (: add4 (integer -> integer)) (define add4 (lambda (x) (+ x 4))) ;(define pi-sum (lambda (a b) (sum pi-fun add4 a b))) ; Alternativ: statt Namen direkt Berechnungsvorschriften angeben: #;(define pi-sum (lambda (a b) (sum (lambda (x) (/ 1 (* x (+ x 2)))) (lambda (x) (+ x 4)) a b))) ; Alternativ: lokal relevanten Namen (pi-sum, add4) auch lokal definieren: (define pi-sum (lambda (a b) (letrec ((pi-fun (lambda (x) (/ 1 (* x (+ x 2))))) (add4 (lambda (x) (+ x 4)))) (sum pi-fun add4 a b)))) (define square (lambda (x) (* x x)))