Zoeken…


Kaart

Kaart past een functie toe op elk element van een lijst:

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")

Vouwen

Vouw rechts past achtereenvolgens een functie met twee argumenten toe op elk element in een lijst van links naar rechts, beginnend met een basiswaarde:

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)

Links vouwen voert dezelfde actie in de tegenovergestelde richting uit:

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 retourneert een lijst van elk item in de gegeven lijst waarvoor het gegeven predicaat een niet- #f waarde retourneert.

;; 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) 

Componeren

Hiermee kunt u verschillende functies samenstellen f₀ f₁ … fₙ . Het retourneert een functie die achtereenvolgens fₙ op zijn argumenten fₙ₋₁ en vervolgens fₙ₋₁ op het resultaat van fₙ enzovoort. Functie wordt van rechts naar links toegepast, zoals voor wiskundige functiesamenstelling: (f ∘ g ∘ h)(x) = f(g(h(x))) .

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

De arity van elke functie moet het aantal geretourneerde waarden van de functie direct rechts bevatten. De meest rechtse functie bepaalt de arity van de hele compositie. De functie compose1 impliceert dat de functies 1 waarde retourneren en 1 argument verwachten. Compose1 beperkt echter niet de invoerariteit van de laatste functie, noch de uitvoerariteit van de eerste functie.

[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...:

Kerrie

Retourneert een gedeeltelijk toegepaste functie.

> ((curry + 10) 20)
30

curryr kan worden gebruikt wanneer de argumenten aan het einde moeten worden ingevoegd. Met andere woorden, (curryr list 1 2) zal een functie produceren die enkele new-arguments ... Wanneer de functie wordt aangeroepen, wordt deze op zijn beurt opgeroepen (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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow