如何优化 SML/NJ 中的列表搜索?

How to optimize a list search in SML/NJ?

我正在 SML/NJ 中编写一段代码,有时需要访问我已经创建的列表。我知道,例如,在 C 中,访问数组需要常数时间。所以,我认为 ML 也是如此。然而,显然,内置的 List.nth(l,i) 函数的复杂度与作为参数给出的列表的大小成线性关系。

然后我转向数组,但我认为 Array.sub 函数也具有线性复杂度。

所以,鉴于访问一个元组,如#2(12,5.6,"foo"),复杂度为O(1),我想问一下有没有办法,我可以使用元组而不是列表,但可以动态访问它。

例如,假设我想编写一个函数,它接受一个只有布尔值和一个整数 n 的元组,并且 returns 如果元组的第 n 个元素是 true.Something喜欢:

fun isTrue (n,tup) =
if #n(tup) then true
else false;

我知道这不是有效的 SML,那么有没有办法编写这样的函数?

非常感谢您的宝贵时间!

sml函数复杂度为O(1),放心使用吧! e.x.

`fun isTrue (n,tup) =
if Array.sub(tup,n) then true
else false;`

就元组而言,只能使用特定的数字,不能在元组中使用变量。 e.x。 fun isTrue (n,tup) = if #2 (tup) then true else false;