解释SML函数及其类型

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?

如果这是一个模糊而写得不好的问题,请道歉.

有人可以向我解释如何计算该函数的类型吗?

谢谢.

luq*_*qui 5

这是一个可能有用的图表:

   ('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)

这就是我们如何到达功能的主体.