我正在用SML / NJ编写一段代码,并且在某些时候需要访问我已创建的列表。我知道,例如,在C中,访问数组需要花费不变的时间。所以,我认为ML也是如此。但是,显然,内置的List.nth(l,i)函数的复杂度与作为参数给出的列表大小成线性关系。
然后我转向数组,但我认为Array.sub函数也具有线性复杂性。
所以,鉴于访问一个元组,如#2(12,5.6," foo"),具有O(1)复杂度,我想问一下是否有办法,我可以使用元组而不是列表,但可以动态访问它。
例如,假设我想编写一个带有元组的函数,只有布尔值和一个整数n,如果元组的第n个元素为真,则返回True。如下:
fun isTrue (n,tup) =
if #n(tup) then true
else false;
我知道这不是有效的SML,所以有没有办法编写这样的函数?
非常感谢你的时间!
答案 0 :(得分:0)
sml函数具有O(1)复杂度,因此请随意使用它! e.x。
st_atime
就元组而言,您只能使用特定数字,而不能使用元组中的变量。
e.x.
`fun isTrue (n,tup) =
if Array.sub(tup,n) then true
else false;`