diff --git a/Programmieren_mit_Higher-Order_Funktionen.html b/Programmieren_mit_Higher-Order_Funktionen.html index 66c0145..bb41b58 100644 --- a/Programmieren_mit_Higher-Order_Funktionen.html +++ b/Programmieren_mit_Higher-Order_Funktionen.html @@ -35,7 +35,7 @@ und #false die einzigen möglichen Argumente der Funktion sind, gibt es genau zwei Werte aus X die die Funktion liefern kann. Umgekehrt kann aus einem Paar aus X*X leicht eine Funktion vom Typ Bool -> X gemacht werden: Wenn das Argument #true ist, nimm die erste Komponente des Paars, bei #false das zweite.
Weitere typische Higher-Order Funktionen für den Umgang mit Listen sind map, filter und flatmap. -Sie sind wie folgt definiert:
; [X Y] (X -> Y) (list-of X) -> (list-of Y) (define (map f xs) (cond [(empty? xs) empty] [(cons? xs) (cons (f (first xs)) (map f (rest xs)))])) ; [X] (X -> Boolean) (list-of X) -> (list-of X) (define (filter f xs) (cond [(empty? xs) empty] [(cons? xs) (if (f (first xs)) (cons (first xs) (filter1 f (rest xs))) (filter f (rest xs)))])) ; [X Y] (X -> (list-of Y)) (list-of X) -> (list-of Y) (define (flatmap f xs) (foldr append empty (map f xs)))
; [X Y] (X -> Y) (list-of X) -> (list-of Y) (define (map f xs) (cond [(empty? xs) empty] [(cons? xs) (cons (f (first xs)) (map f (rest xs)))])) ; [X] (X -> Boolean) (list-of X) -> (list-of X) (define (filter f xs) (cond [(empty? xs) empty] [(cons? xs) (if (f (first xs)) (cons (first xs) (filter f (rest xs))) (filter f (rest xs)))])) ; [X Y] (X -> (list-of Y)) (list-of X) -> (list-of Y) (define (flatmap f xs) (foldr append empty (map f xs)))
Die filter Funktion gibt alle Elemente einer Liste zurück, für die eine boolsche Funktion #true ergibt.
> (filter even? (list 1 2 3 4)) (2 4)