Поиск…


карта

Карта применяет функцию к каждому элементу списка:

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

складка

Fold Right последовательно применяет функцию с двумя аргументами для каждого элемента в списке слева направо, начиная с базового значения:

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 выполняет одно и то же действие в противоположном направлении:

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 возвращает список каждого элемента в указанном списке, для которого данный предикат возвращает значение #f .

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

компоновать

Позволяет вам создать несколько функций f₀ f₁ … fₙ . Он возвращает функцию, которая будет последовательно применять fₙ к ее аргументам, а затем fₙ₋₁ к результату fₙ и т. Д. Функция применяется справа налево, как и для математической функции: (f ∘ g ∘ h)(x) = f(g(h(x))) .

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

Арность каждой функции должна включать в себя количество возвращаемых значений функции сразу справа. Самая правая функция определяет арность всей композиции. Функция compose1 устанавливает, что функции возвращают значение 1 и ожидают 1 аргумент. Однако compose1 не ограничивает входную арность последней функции, а также выходную арность первой функции.

[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 + 10) 20)
30

curryr может использоваться, когда аргументы должны быть вставлены в конце. Другими словами, (curryr list 1 2) создаст функцию, ожидающую new-arguments ... При вызове эта новая функция, в свою очередь, вызовет (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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow