假设我所知道的一个函数是它的类型:
int list -> int * string -> int
有没有办法提前知道这是否意味着:
(int list -> int * string) -> int
或int list -> (int * string -> int)
?
谢谢,
bclayman
答案 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.