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并返回一个'bg拿a 'b并返回a'cx是一个'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 次 |
| 最近记录: |