;; 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 numtree) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #f #t none explicit #f ()))) ; Ein Zahlenbaum ist eins der folgenden: ; - ein Blatt, d.h. eine Zahl (number) ; - ein innerer Knoten, d.h. Liste von Zahlnbäumen (define numtree (signature (mixed number (list-of numtree)))) (: t1234 numtree) (define t1234 (list 1 (list 2 3) 4)) ; Prädikat: Ist ein Baum ein Blatt? (: leaf? (any -> boolean)) (define leaf? (lambda (t) (number? t))) ; Bestimme die Anzahl der Blätter eines Baumes (: number-of-leaves (numtree -> natural)) (check-expect (number-of-leaves 3) 1) (check-expect (number-of-leaves (list 1 2)) 2) (check-expect (number-of-leaves t1234) 4) #;(define number-of-leaves (lambda (t) (cond ((leaf? t) ...) ((empty? t) ...) ((cons? t) ...(first t) ... (number-of-leaves (rest t)) ....)))) (define number-of-leaves (lambda (t) (cond ((leaf? t) 1) ((empty? t) 0) ((cons? t) (+ (number-of-leaves (first t)) (number-of-leaves (rest t)))))))