我有这个功能:
fun x (u,v,w) = (u::[v])::w;
获得
的返回类型fn: 'a * 'a * 'a list list -> 'a list list
有人可以向我解释这个类型是如何从函数中生成的吗?谢谢!
编辑:另外,我如何调用此函数?
答案 0 :(得分:2)
::
有两个参数 - 一个在左边,一个在右边。如果其左参数的类型为t
,则其右参数必须为t list
类型。
因此,::
的类型为('a * 'a list) -> 'a list
,因为t
是任意的,因此由'a
表示。
当您拥有代码(u::[v])
时,您告诉SML某些类型u : t
'v : t
和t
。该表达式为t list
,因此要将其用作::
的左参数,正确的参数w
必须具有t list list
类型。
然后,对于某些(u::[v])::w
,t list list
的类型为t
。
总结:
u : t
v : t
w : t list
(u::[v])::w : t list list
,
所有类型t
。
因此,x
的类型为('a * 'a * 'a list) -> 'a list list
,因为t
是任意的。
要调用此函数,您可以执行x(1,2,[3,4])
之类的操作,这会给列表[[1,2],[3,4]]
。