;; Die ersten drei Zeilen dieser Datei wurden von DrScheme eingefügt. Sie enthalten Metadaten ;; über die Sprachebene dieser Datei in einer Form, die DrScheme verarbeiten kann. #reader(lib "DMdA-vanilla-reader.ss" "deinprogramm")((modname kapitel-8a) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #f #t none explicit #f ()))) ; Kapitel 8 ; Gästelisten ; Ein Gast ist besteht aus ; - einer Zeichenkette für den Namen ; - einem boolschen Wert, der angibt ob es sich um einen Mann oder ein Frau handelt ; - einem boolschen Wert, der angibt ob es sich um einen Vegetarier handelt (: make-guest (string boolean boolean -> guest)) (: guest? (%a -> boolean)) (: guest-name (guest -> string)) (: guest-male? (guest -> boolean)) (: guest-vegetarian? (guest -> boolean)) (define-record-procedures guest make-guest guest? (guest-name guest-male? guest-vegetarian?)) ; Axls Party (: party (list guest)) (define party (list (make-guest "Axl" #t #f) (make-guest "Stephanie" #f #t) (make-guest "Slash" #t #f) (make-guest "Erin" #f #f))) ; aus einer Gästeliste eine Liste der Vegetarier bilden (: vegetarian-guests ((list guest) -> (list guest))) (check-expect (vegetarian-guests party) (list (make-guest "Stephanie" #f #t))) (define vegetarian-guests (lambda (lis) (cond ((empty? lis) empty) ((pair? lis) (if (guest-vegetarian? (first lis)) (make-pair (first lis) (vegetarian-guests (rest lis))) (vegetarian-guests (rest lis))))))) ; aus einer Gästeliste eine Liste der Männer bilden (: male-guests ((list guest) -> (list guest))) (check-expect (male-guests party) (list (make-guest "Axl" #t #f) (make-guest "Slash" #t #f))) (define male-guests (lambda (lis) (cond ((empty? lis) empty) ((pair? lis) (if (guest-male? (first lis)) (make-pair (first lis) (male-guests (rest lis))) (male-guests (rest lis))))))) ; Gästeliste filtern (: filter-guests ((guest -> boolean) (list guest) -> (list guest))) (check-expect (filter-guests guest-vegetarian? party) (list (make-guest "Stephanie" #f #t))) (check-expect (filter-guests guest-male? party) (list (make-guest "Axl" #t #f) (make-guest "Slash" #t #f))) (define filter-guests (lambda (p? lis) (cond ((empty? lis) empty) ((pair? lis) (if (p? (first lis)) (make-pair (first lis) (filter-guests p? (rest lis))) (filter-guests p? (rest lis)))))))