0

在 sml 中,我们通过 l::ls 将整数或字符串列表定义为参数,这有助于我们定义任意长度的列表,然后我们可以与 = 或 > 或 < 进行比较。我们如何以类似的方式表示元组?比如我会写,

fun delete(x,l::ls)=if x=l then delete(x,ls) else l::delete(x,ls)

我怎样才能为元组写类似的东西?

请注意,我什至需要比较元组的各个元素:即 (a1,b1)>(a2,b2) if b1>b2 所以一些只能像上面那样删除的排序是不够的。

谢谢你。

4

1 回答 1

1

您可以使用通常的形式直接在元组上进行模式匹配(x, y)

您的delete函数适用于任何'a list类型,因此它也适用于元组列表。这是一个基于元组中的第一个值过滤列表的示例:

fun deleteByFirst(x0, []) = []
  | deleteByFirst(x0, (x, y)::ls) = 
    if x = x0 
    then deleteByFirst(x0, ls) 
    else (x, y)::deleteByFirst(x0, ls)
于 2012-10-19T21:51:20.923 回答