在标准ML(新泽西州的标准ML)中,我们使用以下语法构造元组
val x = (1, 2);
val u = ();
但是我们不能只用一个元素来构造元组
val x = (1); (* normal int *)
val y = (1,); (* python syntax, not valid in SML *)
另一方面,一个元素元组和元素本身似乎具有相同的类型签名。
我们可以在SML中区分'a
只有一个类型元素的元组'a
吗?如果是这样,我们如何构造一个元素元组以及它的类型签名?
我们可以在SML中区分
'a
只有一个类型元素的元组'a
吗?
是的你可以。
与Python不同,它没有任何特殊的(1,)
语法。但是,由于元组等同于带有编号字段的记录,因此您可以创建一个仅具有一个命名字段的记录,1
并使用#1
宏访问该记录以获取元组的第一个值:
- val foo = { 1 = 42 };
val foo = {1=42} : {1:int}
- #1 foo;
val it = 42 : int
通过尝试将常规2元组注释为记录,您可以看到这实际上是1元组:
- (3.14, "Hello") : { 1 : real, 2 : string };
val it = (3.14,"Hello") : real * string
它的类型签名是什么?
类型为{ 1 : 'a }
。您可以像这样保留type参数:
type 'a one = { 1 : 'a };
您可以使用来获得类似的内容datatype
:
datatype 'a one = One of 'a
fun fromOne (One x) = x
我认为这些将使用相同数量的内存。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句