什么是理解 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
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