찾기 TL; 이하 DR.
ML- 언어가 뿌리깊은 람다 미적분학 (저와 함께)에 핵심 아이디어는 응용 프로그램 또는 기능 매핑을 추상화하는 것에 관한 것입니다. 단 하나의 인수.
λx[x + 1]
위의 λ
가 x
대한 값 대기 애플리케이션으로 기능 x + 1
추상화 판독 변화로부터 가드 및 적용 (값을 가진 함수의 x
교체 및 계산). int -> int
유형, 또는 입력 및 출력 유형 int
int
타입을 갖는다
fun x -> x + 1
:
OCaml의 위는 동등하다. 이제 람다는 한 번에 하나의 인수 만 처리합니다. 이 함수는 x*x -2*x + c
(다항식 함수 x2 − 2·x + c
)과 같은 여러 인수가있는 함수에서 어떻게 작동합니까? 그것은 이전과 마찬가지로 한 번에 하나씩 논쟁을 평가합니다.
따라서 이전 응용 프로그램의 출력은 다음 응용 프로그램의 입력이됩니다.OCaml의 등가 될
fun c x -> (x * x) - (2 * x) + c
함수 int -> int -> int
또는 (int -> int) -> int
(입력 체인 -> 출력) 타입을 갖는다는 인수 x = 3
부분적 함수를 적용 할 경우, 감소 된 기능과 같이 얻을 :
fun c 3 -> (3 * 3) - (2 * 3) + c
fun c -> 9 - 6 + c
fun c -> 3 + c
결과 함수의 유형은 int -> int
입니다. 이것은 currying의 기초입니다. 처음에는 혼란스러워 보일 수도 있지만 명령형 언어로는 매우 유용하고 과소 평가되었습니다. 예를 들어, 당신이 이런 식으로 뭔가를 할 수 :
let waiting_for_c_and_x = fun c x -> 2*x + c
let waiting_for_c = waiting_for_c_and_x 10 in
let result = waiting_for_c 2 (* result = 22 *)
TL; DR을
그러나, 그룹에 입력이 체인을 괄호를 사용하여/출력이 까다로운하지만 OCaml이 필요하기 때문에 실제로 컴파일러는 할 수 없습니다 ~에서 추측 int * int -> int
는 입력으로서 int * int
쌍을 허용하는 응용 프로그램을 의미하고 int
한 쌍의 기록 수를 인수로 입력 int -> int
하는 기능 (받아들이 (우리 (int * int) -> int
같이 괄호로 수) 출력 또는 하나로서 int
을 돌아 오면 int * (int -> int)
으로).
가
Stanford Encyclopedia of Philosophy (very good read)
에서 적용 '(INT -> INT)는''int'에 int''에서 함수의 유형이다. – gallais
@gallais는별로 도움이되지 못했습니다. – PieOhPah
당신이 무엇을 요구하고 있는지 명확하지 않습니다 ... – gallais