;; 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 numlist) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #f #t none explicit #f ()))) ; Eine nicht-leere Zahlenliste besteht aus ; - einer Zahl (1. Element, Kopf der Liste) ; - einer Zahlenliste (define-record-procedures nonempty-list cons cons? (first rest)) ; Eine Zahlenliste ist eins der Folgenden: ; - eine leere Liste ; - eine nicht-leere Zahlenliste (define numlist (signature (mixed empty-list nonempty-list))) (: cons (number numlist -> nonempty-list)) (: cons? (any -> boolean)) (: first (nonempty-list -> number)) (: rest (nonempty-list -> numlist)) (define list1 (cons 1 empty)) (define list2 (cons 1 (cons 2 empty))) (define list3 (cons 1 (cons 2 (cons 3 empty)))) (define prim4 (cons 2 (cons 3 (cons 5 (cons 7 empty))))) ; Bestimme die Summe aller Elemente einer Zahlenliste (: list-sum (numlist -> number)) (check-expect (list-sum empty) 0) (check-expect (list-sum list3) 6) (check-expect (list-sum prim4) 17) #;(define list-sum (lambda (nl) ...)) ; Gemischtes Datum #;(define list-sum (lambda (nl) (cond ((empty? nl) 0) ((cons? nl) ...(first nl) ...(rest nl)...)))) #;(define list-sum (lambda (nl) (cond ((empty? nl) 0) ((cons? nl) (+ (first nl) (list-sum (rest nl))))))) (define list-sum (lambda (nl) (if (empty? nl) 0 (+ (first nl) (list-sum (rest nl))))))