有人可以帮我理解 SML 中的 List.nth 吗?
它从列表中输出指定的元素。 一)
List.nth ([7,3,6,1],0);
val it = 7 : int
b)
List.nth ([7,3,6,1],1);
val it = 3 : int
例如:
有趣的地图_ nil = nil |映射 f (a::b) = (f a) :: (映射 f b);
有趣的foldr _ c nil = c |折叠 f c (a::b) = f(a, 折叠 f c b);
同样,List.nth 内部实际发生的情况。
List.nth
的简单实现如下所示,使用模式匹配和 option
类型来处理越界错误。
fun nth([], _) = NONE
| nth(x::_, 0) = SOME x
| nth(x::xs, i) = nth(xs, i - 1)
我们在空列表中查找什么索引并不重要。不在那里。
如果索引为
0
,则返回列表中的第一个元素。列表的其余部分是什么并不重要。
否则,对列表的其余部分调用
nth
并将索引减少 1。
所以如果我们调用
nth([3, 7, 4, 1, 8], 3)
递归看起来像:
nth([3, 7, 4, 1, 8], 3)
nth([7, 4, 1, 8], 2)
nth([4, 1, 8], 1)
nth([1, 8], 0)
SOME 1
nth (l, i)
返回列表i
的第l
(第)个元素,从0开始计数。换句话说,它通过索引l
访问i
中的元素。
在示例中,“a”
List.nth([7,3,6,1], 0)
返回i
中的第l
(第)个元素,即7
在示例“b”中,
List.nth([7,3,6,1], 1)
返回i
中的第l
(第)个元素,即3