【问题标题】:Sml tuples lengthSml 元组长度
【发布时间】:2021-07-27 21:12:20
【问题描述】:

我很感兴趣是否有一种方法可以在 sml 中获取元组的长度?!看例子

val tes = ((1,"test"),("test","some")) 
Lenght(tes) = 2

我想要它来解决问题有一个问题说要获取学生列表,其中包含每个学生信息的列表,但学生信息在两种类型中有所不同,有些类似

(1,"test","nick") 

有些像

("name","nick")

所以它想返回学生列表中每个列表的第一个元素,如下所示:

((1,"test","nick"),("test2","nick2"),(2,"test3","nick3"))

Return > (1,"test2",2)

这里有更多信息 M Molbdnilo @molbdnilo

【问题讨论】:

  • 你不能写一个函数来接受不同“tuplicities”的元组,所以不,这是不可能的。 (除了琐碎;你当然可以写fun length (a,b) = 2)你打算用这些信息做什么? (见XY problem。)
  • @molbdnilo 我有一个问题要解决,它要求我获取学生信息列表并返回他们的第一个元素学生列表包含两种类型的列表,其中一些类似于(id, "name","nick"),其中一些类似于 ("name","nick")
  • 但是你会遇到(int * string * string) list 类型与(string * string) list 类型不同的问题——所以你尝试编写的函数将是错误类型的。跨度>
  • 我怀疑你应该定义一个新的数据类型,并有一个列表。
  • 如前所述,您不能拥有您在 ML 中提到的列表。这基本上是不可能的——列表的所有元素都必须具有相同的类型。您一定遗漏了问题描述的一些关键部分。

标签: sml smlnj mosml


【解决方案1】:

您最有可能做的事情的示例;定义一些有用的sum类型

首先,让我们发明两种方法来识别一个人:

datatype Person = JustName of string
                | NameAndNumber of string * int

datatype Identifier = Name of string
                    | Number of int

那么您可以通过Identifier 获得Person

fun identifier (JustName n) = Name n
  | identifier (NameAndNumber (_, i)) = Number i

让我们和一些人一起测试:

- val people = [JustName "A", NameAndNumber ("B", 23), JustName "C", NameAndNumber ("D", 22)];
val people =
  [JustName "A",NameAndNumber ("B",23),JustName "C",NameAndNumber ("D",22)]
  : Person list

- map identifier people;
val it = [Name "A",Number 23,Name "C",Number 22] : Identifier list

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多