这是我的任务,称为时间和空间要求。
注意:我正在与之合作的导师说他没有看到用例,所以我们使用了一个(1,2,3,4,5,6)列表。
exception Empty;
exception Empty;
fun middle1(l) =
let fun len(nil) = 0
| len(x::l) = 1+len(l)
and get(n, nil) = raise Empty
| get(n, x::l) = if n=1 then x else get(n-1,l)
in
get((len(l) div 2)+1, l)
end;
val middle1 = fn : 'a list -> 'a
middle1([1,2,3,4,5,6]);
val it = 4 : int
到目前为止,我们拥有的是:
一个。 2次调用len
功能和2次激活记录
湾4次调用get
功能和4次激活记录
℃。我们相信它更有效率。只能使用一个激活记录,因为它可以重复使用,并且可以使用赋值来更改每个调用的函数参数值。
基本上,我们是朝着正确的方向前进吗?
非常感谢任何帮助。