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的算法书实现过联合查找