SML:确定函数类型

时间:2015-08-13 21:32:21

标签: functional-programming sml

假设我所知道的一个函数是它的类型:

int list -> int * string -> int

有没有办法提前知道这是否意味着:

(int list -> int * string) -> intint list -> (int * string -> int)

谢谢,

bclayman

1 个答案:

答案 0 :(得分:3)

cmdsource commandname 在SML类型注释中是正确的关联,因此->是正确的。

在REPL中考虑这个简单的实验:

int list -> (int * string -> int)

- fun add x y = x+y; val add = fn : int -> int -> int 是一个函数,当输入int时,返回一个函数,即将add发送到y的函数 - 因此其类型为x + y。它不是一个函数,当从ints到ints的函数输入一个int(这是int -> (int ->int)将是什么)时。后来的一个有点人为的例子是:

(int -> int) -> int

如果我定义- fun apply_to_zero_and_increment f = 1 + f(0); val apply_to_zero_and_increment = fn : (int -> int) -> int ,则fun g(x) = x + 5会返回6.