什么是理解 ML 中函数 return 函数的好策略?

What is a good stategy to understand function return function in ML?

val g1 = fn x => fn y => fn z => (x y) :: z;
val g1 = fn : ('a -> 'b) -> 'a -> 'b list -> 'b list

这是代码和输出。我不知道为什么输出是这样的。

我理解 'b list -> 'b list 因为 z 显然是一个列表所以 (x y) :: z 也是一个列表。

但是,我不明白为什么fn x => fn y('a -> 'b) -> 'a

我不知道为什么是 ('a -> 'b) -> 'a

请给我一个理解这段代码的好攻略

那里没有任何类型 ('a -> 'b) -> 'a

-> 联想到右边,所以

('a -> 'b) -> 'a -> 'b list -> 'b list

('a -> 'b) -> ('a -> ('b list -> 'b list))

定义也是如此;

fn x => fn y => fn z => (x y) :: z

fn x => (fn y => (fn z => (x y) :: z))

  • x'a -> 'b
  • y'a
  • z'b list
  • 结果是'b list

如果你取消函数的柯里化,也许它会变得更清楚

fun g2(x, y, z) = (x y) :: z

类型为

(('a -> 'b) * 'a * 'b list) -> 'b list