如何在标准ML中仅使用一个元素构造一个元组?

飙升0x48

在标准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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何创建仅包含一个元素的元组

如何创建仅包含一个元素的元组

c++ - 如何在C++中使用匹配数据类型的两对中的四个元素构造一个元组?

如何使用另一个元组中的元素从元组中查找索引

如何在flutter中将2个元素的行中仅一个元素居中

如何在两个不同的元组列表中与元组的第一个元素相交

如何从仅匹配 Haskell 中元组的第一个值的元组列表中删除元素

如何在另一个列表的元组中插入列表元素

如何在sql查询Python中传递一个元素作为参数的元组?

如何使用gmock匹配C ++元组中的一个元素?

如何从流中仅提取一个允许的元素?

如何仅打印矢量中的一个元素

如何使用JavaScript仅选择一个li元素?

C ++从索引不在给定index_sequence中的元素构造一个元组

如何在Chapel中构造一个新的Matrix()?

如何在Java中从另一个调用一个构造函数?

如何在 kotlin 中定义一个只有一个构造函数的类?

如何在 ReactJs 中仅打印 JSON 数组中的第一个元素?

如何在Firebase中的数组中仅设置一个元素

Scala:仅映射元组中的第一个元素

如何在Xtext语法中为多个元素仅允许一个修饰符?

返回两个元组时如何仅使用一个参数

如何通过类方法迭代元组列表中每个元组的第一个元素?

在使用Base的OCaml中,如何构造一个类型为`int * int`的元素的集合?

如何在EditText中仅允许一个单词?

如何在一个函数中仅保留一个return语句?

如何在 Map 中找到最小元素并返回一个元组(键,最小元素)?

Java中如何使用Class构造一个TableModel

如何按每个元组中的第一个元素对元组列表进行排序,并选择每组中最后一个元素最大的元组