Suche…


Karte

Map wendet eine Funktion auf jedes Element einer Liste an:

map: (a -> b) (listof a) -> (listof b)

> (map (lambda (x) (* x 2)) (list 1 2 3 4 5)
(list 2 4 6 8 10)

> (map sqrt (list 1 4 9))
(list 1 2 3)

> (map (lambda (x) (if (even? x) "even" "odd")) (list 1 2 3))
(list "odd" "even" "odd")

Falten

Fold Right wendet nacheinander eine Funktion mit zwei Argumenten auf jedes Element in einer Liste von links nach rechts an, beginnend mit einem Basiswert:

foldr: (a b -> b) b (listof a) -> b

> (foldr + 0 (list 1 2 3 4))
10

> (foldr string-append "" (list "h" "e" "l" "l" "o"))
"hello"

> (foldr cons empty (list 1 2 3 4))
(list 1 2 3 4)

Fold Left führt dieselbe Aktion in die entgegengesetzte Richtung aus:

foldl: (a b -> b) b (listof a) -> b

> (foldl + 0 (list 1 2 3 4)
10

> (foldl string-append "" (list "h" "e" "l" "l" "o"))
"olleh"

> (foldl cons empty (list 1 2 3 4))
(list 4 3 2 1)

Filter

filter gibt eine Liste aller #f in der angegebenen Liste zurück, für die das angegebene Prädikat einen Nicht- #f Wert zurückgibt.

;; Get only even numbers in a list
> (filter even? '(1 2 3 4))
'(2 4)

;; Get all square numbers from 1 to 100
> (filter (lambda (n) (integer? (sqrt n))) (range 1 100))
'(1 4 9 16 25 36 49 64 81) 

Komponieren

Lässt Sie mehrere Funktionen f₀ f₁ … fₙ . Sie gibt eine Funktion zurück, die nacheinander fₙ auf ihre Argumente fₙ₋₁ , dann fₙ₋₁ auf das Ergebnis von fₙ und so weiter. Funktion wird von rechts nach links angewendet, wie für die mathematische Funktionszusammensetzung: (f ∘ g ∘ h)(x) = f(g(h(x))) .

> ((compose sqrt +) 16 9)
5
> ((compose - sqrt) 16)
-4

Die Arity jeder Funktion sollte die Anzahl der zurückgegebenen Werte der Funktion unmittelbar rechts davon enthalten. Die Funktion ganz rechts bestimmt die Gesamtheit der Komposition. Die Funktion compose1 schreibt vor, dass die Funktionen einen Wert zurückgeben und ein Argument erwarten. Compose1 beschränkt jedoch weder die Eingabearität der letzten Funktion noch die Ausgabearität der ersten Funktion.

[n input]--> first-function -->[1 output]--> ... last function -->[m output].

((compose + values) 1 2 3 4)
10
> ((compose1 + values) 1 2 3 4)
XX result arity mismatch;
 expected number of values not received
  expected: 1
  received: 4
  values...:

Curry

Gibt eine teilweise angewendete Funktion zurück.

> ((curry + 10) 20)
30

curryr kann verwendet werden, wenn die Argumente am Ende eingefügt werden müssen. Mit anderen Worten, (curryr list 1 2) erzeugt eine Funktion, die einige new-arguments ... erwartet new-arguments ... Beim Aufruf ruft diese neue Funktion ihrerseits auf (list new-arguments ... 1 2) .

> (((curryr list) 1 2) 3 4)
'(3 4 1 2)
> ((curryr list 1 2) 3 4)
'(3 4 1 2) 
> ((curryr - 30) 40)
10
> (((curryr -) 30 40))
10


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow