Chr*_*ris 2 types function sml
所以我有这个功能:
fn (f,g,x) => g(f(x));
这个函数的类型是:
('a -> 'b) * ('b -> 'c) * 'a -> 'c
函数是否表示f表示'a,g表示'b,x表示'c?在那种情况下,怎么会('a -> 'b)
出现?因为这不代表f - > g?
如果这是一个模糊而写得不好的问题,请道歉.
有人可以向我解释如何计算该函数的类型吗?
谢谢.
这是一个可能有用的图表:
('a -> b') * ('b -> 'c) * 'a -> 'c
^^^^^^^^ ^^^^^^^^ ^ ^^^^^^^
fn ( f , g , x) => g(f(x));
Run Code Online (Sandbox Code Playgroud)
对于任何你想要的类型'a
,'b
和'c
,
f
拿一个'a
并返回一个'b
g
拿a 'b
并返回a'c
x
是一个'a
.而'c
在最后说,鉴于这些东西,我们的函数返回'c
.
那你怎么得到一个'c
?好吧,既然x
是'a
,你可以f
用来获得'b
:
x : 'a
f(x) : 'b
Run Code Online (Sandbox Code Playgroud)
现在我们有一个'b
,如果你给g
一个'b
它会给你回'c
:
g(f(x)) : 'c
Run Code Online (Sandbox Code Playgroud)
这就是我们如何到达功能的主体.
归档时间: |
|
查看次数: |
103 次 |
最近记录: |