2017-04-25 2 views
2
curry f a b = f(a,b) 

생각 (카레 기준) : 그래서이 유형을 이해하는 데 도움이 필요

(a -> b -> c) -> (a, b) -> c 

: 카레 기능은 F를 (A, B), 그래서 내가 생각했던 유형이 기능 팹 소요 반환 왜 형식이 바뀌는가? :

((a, b) -> c) -> (a -> b -> c) 

답변

3

나는 당신의 혼란의 근원이 구절 믿습니다. ab은 카레 함수에 전달되는 인수입니다.

(curry f) a b = f (a,b) 

... 또는 람다로 우측으로 ab를 이동시킴으로써 ... 부분 애플리케이션이 더 분명하게하기 위해, 하나 불필요한 괄호 쌍을 부가함으로써 그보고 쉽다 :

curry f = \a b -> f (a,b) 

f은 한 쌍을받는 함수입니다 - 우리는 그것을 한 쌍의 (a,b)을주고 있습니다. 반면에 curry f은 두 개의 인수를 따로 따로 사용합니다. 즉, curry의 유형은 실제로입니다.

curry :: ((a, b) -> c) -> (a -> b -> c) 
1

커리는 함수이고 함수를 반환하는 단 하나의 인수 만 사용합니다. 그 인자는 서명, 즉 하나 개의 인수를 취하는 함수

((a, b) -> c) 

와 함수 : 일 (A 및 B)의 쌍과 다른 물건 C를 반환한다. 카레는 그 기능에 뭔가 마법을 수행하고 새로운 기능으로 변합니다 :

즉 두 개의 인수를 취하는 함수
(a -> b -> c) 

: 일 a와 일의 B 및 일의 C를 반환합니다.

그래서 번호 :

curry f a b 

가 같다 :

let newFunction = curry(f) 
newFunction a b 

기본적 카레 두 인수 대신으로서 그 쌍을 취하는 함수로 쌍을 취하는 함수를 변환한다. curry 함수를 취하고, 그 기능은 f입니다 :

카레 함수가 나 정말

하지 않는 함수 f를 취합니다

관련 문제