Types SML中的派生表达式类型

Types SML中的派生表达式类型,types,sml,smlnj,ml,Types,Sml,Smlnj,Ml,我对sml有点陌生,我正在尝试理解如何派生表达式类型。 我读了,我试着按照他做的来推导我的表达,但我一段都听不懂 我试图推导的表达式是: fn x => fn y => fn z => z(z(y x)) 我现在做的是: fn x : T1 => fn y : T2 => fn z : T3 => z(z(y x)) : T4 在这一点上,它应该是 T2 = T1 -> T5 //y x T3 = T5 -

我对sml有点陌生,我正在尝试理解如何派生表达式类型。
我读了,我试着按照他做的来推导我的表达,但我一段都听不懂

我试图推导的表达式是:

fn x => fn y => fn z => z(z(y x))
我现在做的是:

fn x : T1 => fn y : T2 => fn z : T3 => z(z(y x)) : T4
在这一点上,它应该是

T2 = T1 -> T5                       //y x
T3 = T5 -> T6                       //z(y x)
T3 = T6 -> T7                       //z(z(y x))
这就是我认为我犯了错误的地方

还有一个约束,比如

T7 = T4 or T6 = T4.    
在这一点上我不确定也不清楚


提前感谢您的帮助。

您已经将
T4
分配给
z(z(y x))
,因此我们可以在最后一个等式中使用它

T3 = T5 -> T6                       //z(y x)
T3 = T6 -> T4                       //z(z(y x))

既然
T5->T6=T6->T4
,那么接下来就是
T5=T6
T6=T4

谢谢你的回答,你能解释一下T5=T6和T6=T4是怎么回事吗?我不太清楚。对不起,我不确定我是哑巴还是什么。一个复合物
T5->T6
等于另一个复合物
T6->T4
,它们对应的部分也相等。非常感谢,我对此有疑问,但我解决了它。非常感谢。