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