수색…


지도

지도는 함수를 목록의 모든 요소에 적용합니다.

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)

접기 왼쪽 은 같은 동작을 반대 방향으로 수행합니다.

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

각 함수의 아티 (arity)에는 함수의 반환 된 값의 수를 즉시 포함해야합니다. 가장 오른쪽의 함수는 전체 구성의 아티 (arity)를 결정합니다. compose1 함수는 함수가 1 값을 반환하고 1 인수를 요구합니다. 그러나 compose1은 마지막 함수의 입력 arity 나 첫 번째 함수의 출력 arity를 ​​제한하지 않습니다.

[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 ... 기대하는 함수를 생성합니다 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