Arrays SML中的数组函数

Arrays SML中的数组函数,arrays,sml,Arrays,Sml,我正在使用持久数组创建联合查找算法。以下是我可以使用的一些函数: Array.sub : 'a array * int -> 'a Array.update: 'a array * int * 'a -> unit 我需要建一张桌子 datatype 'a table = Array of 'a Array.array | Change of int * 'a * 'a table ref 使用Change构造函数和库,在一个固定时间内仅与一个插槽不同的现有插槽 Array.t

我正在使用持久数组创建联合查找算法。以下是我可以使用的一些函数:

Array.sub : 'a array * int -> 'a
Array.update: 'a array * int * 'a -> unit
我需要建一张桌子

 datatype 'a table = Array of 'a Array.array | Change of int * 'a * 'a table ref
使用Change构造函数和库,在一个固定时间内仅与一个插槽不同的现有插槽

Array.tabulate : int * (int-> 'a)-> 'a array
实现返回对大小为n的表的引用的函数,其中每个元素都是自己的分区

newTable : int -> int table ref
这是我的尝试,但任何帮助都将不胜感激,因为我真的很困惑:

fun newTable n = 
        if 0 = Array.sub(Array.tabulate (n,fn i => i), 0) 
            then () 
        else 
           ref(Change(Array.array(n)));

我不确定我是否正确理解了你的问题,但我会尝试从我认为你的问题需要你做的事情来回答

如果查看
newTable
签名,可以看到它在输入时接受
int
,并返回
int table ref
。您的解决方案返回
单位
,因此不会进行类型检查

newTable
的目标是返回一个相互不同的整数表上的ref。您已经了解,可以使用
array.tablate
构建不同(递增)整数的数组。但必须重新运行
表,而不是
数组
数据类型的定义告诉我们如何使用
数组
生成它,因此您所要做的就是将生成的数组包装起来,如下所示:

fun newTable n = 
    ref (Array (Array.tabulate (n,fn i => i)))

newTable
函数相当于中描述的MakeSet操作,经过改进后生成一个完整的集合,而不是一个单独的集合。

函数
newTable
到底应该做什么?我曾经根据Robert Sedgewick的算法书实现过联合查找