2013-03-22 3 views
1

안녕하세요, 누군가 아래에 설명 된 이유가 무엇인지 설명해주십시오. 나는 그들이 x+y+z이기 때문에 그들이 정수가되어야한다는 것을 이해한다. 그러나 논증의 수 (즉, ->)는 나에게 임의적으로 보인다.Ocaml : 왜 이러한 유형입니까?

let f x y z = x+y+z in f 1 2 3  // int 
let f x y z = x+y+z in f 1 2  // int -> int 
let f x y z = x+y+z in f   // int -> int -> int -> int 

고마워요!

답변

2

valtron의 대답에 약간 확장됩니다. f의 유형을 이해하면 모든 것이 간단합니다. valtron이 말했듯이, 그 타입은 int -> int -> int -> int입니다. 근본적으로 이것은 int을 사용하고 int -> int -> int 유형의 함수를 반환하는 함수 유형입니다. 따라서 1f (예제에서 수행하지 않음)으로 전달하면 int -> int -> int 유형의 값이 반환됩니다.

마찬가지로 반환 된 함수에 int을 전달하면 int -> int 유형의 함수가 반환됩니다. 예를 들어 f 1 2이 정확히 수행하면 1f으로 전달 된 다음 2f이 반환하는 값으로 전달됩니다. 이 두 번째 함수 호출 은유형을 반환합니다. 최상위 수준은 사용자에게 표시됩니다.

마찬가지로, f 뒤에 세 개의 값을 지정하면 int 값이 반환됩니다. 이것은 첫 번째 예에서 일어나는 일입니다.

1

f의 유형은 사용자가 정의한대로 int -> int -> int -> int입니다. f을 제공하는 각 인수는 currying으로 인해 표현식의 유형을 벗어난 int을 면도합니다. 예를 들어, f 1 2int -> int입니다. 즉, xy12으로 카레트되어 더 이상 매개 변수가 아니기 때문에 int를 반환하고 int를 반환하는 함수입니다.

관련 문제