Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 解释SML函数及其类型_Function_Types_Sml - Fatal编程技术网

Function 解释SML函数及其类型

Function 解释SML函数及其类型,function,types,sml,Function,Types,Sml,所以我有这个函数: fn(f,g,x)=>g(f(x)) 此功能的类型为: ('a->'b)*('b->'c)*'a->'c 该函数是否意味着f代表“a”,g代表“b”,x代表“c”?同样在这种情况下,('a->'b)是如何产生的?因为这不意味着f->g吗 如果这是一个晦涩难懂、写得不好的问题,我道歉 有人能给我解释一下这个函数的类型是如何计算的吗 谢谢。将(x1,x2,x3)映射到e的函数类型是τ₁ * τ₂ * τ₃ -> τ'式中τ₁是x1,τ的类型₂是x2,τ的类型₃是x3的类型,τ'是

所以我有这个函数:

fn(f,g,x)=>g(f(x))

此功能的类型为:

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

该函数是否意味着f代表“a”,g代表“b”,x代表“c”?同样在这种情况下,
('a->'b)
是如何产生的?因为这不意味着f->g吗

如果这是一个晦涩难懂、写得不好的问题,我道歉

有人能给我解释一下这个函数的类型是如何计算的吗


谢谢。

(x1,x2,x3)
映射到
e
的函数类型是
τ₁ * τ₂ * τ₃ -> τ'
式中
τ₁
x1
τ的类型₂
x2
τ的类型₃
x3
的类型,
τ'
e
的类型。这就是产品类型的定义:它是这些类型的元素元组的类型

这里
f
有一种形式
'a->'b
g
有一种形式
'b->'c
x
有一种形式
'a
。显然,
f
g
有函数类型,因为它们应用于参数。此外,由于
f
应用于
x
,因此
f
的参数类型与
x
的类型相同:两者都是
'a
。同样地,
f
的返回类型和
g
的参数类型是相同的类型(
'b
),因为
g
应用于
f
返回的值


我不知道你说的“代表”是什么意思
'c
代表
x
的类型(这也是
g
的参数类型)。(这可以是任何类型:函数是多态的。)
'b
代表
g
的参数类型(也是
f
的返回值类型)
'a
代表
f

的参数类型,下面的图表可能会有所帮助:

   ('a -> b') * ('b -> 'c) * 'a  ->   'c
    ^^^^^^^^     ^^^^^^^^     ^     ^^^^^^^
fn (   f      ,     g      ,  x) => g(f(x));
对于您想要的任何类型的
'a
'b
'c

  • f
    接受
    'a
    并返回
    'b
  • g
    接受
    'b
    并返回
    'c
  • x
    是一个
    'a
最后的
'c
表示,给定这些东西,我们的函数返回一个
'c

那么如何获得
'c
?因为
x
'a
,所以可以使用
f
获得
'b

x : 'a
f(x) : 'b
现在我们有一个
'b
,如果你给
g
a
'b
,它会给你一个
'c

g(f(x)) : 'c

这就是我们如何得出函数体的方法。

既然其他答案已经充分解释了如何推导这个函数的类型,我只想补充一点,如果使用
x
参数,并且翻转了
f
g
的组合,该函数相当于标准ML中已内置的合成运算符:

  • fn(f,g)=>(fnx=>f(gx))
    相当于
  • fn(f,g)=>(fnx=>(fog)x))
    相当于
  • fn(f,g)=>fog
    等同于
  • fn(f,g)=>(op o)(f,g)
    等同于
  • 操作o