在sml foldl的列表中获取最后一个元素

时间:2014-09-24 10:31:09

标签: sml

我正在尝试使用SML中的 foldl 检索列表的最后一个元素,而不是从我已经完成的工作中获得很多正确的答案,以下是我的不良尝试之一,任何帮助!

            fun last p = foldr ( fn (x, y) => if ( p y ) then x else y ) [];

2 个答案:

答案 0 :(得分:2)

即使您应该小心,也可以使用List.last,因为如果您在空列表中使用它会引发异常。

对于MosML实现,您可以在http://mosml.org/mosmllib/List.html#last-val

找到文档

答案 1 :(得分:1)

正如RasmusWL所提到的,List.last是适合一般使用的工具。

可以使用foldl

重新创建

fun last(alist, init) = List.foldl (fn(x,y) => x) init alist

这会产生签名:fn : 'a list * 'a -> 'a

使用foldr编写它:

fun last(alist, init) = List.foldr (fn(x,y) => x) init (List.rev alist)

使用foldl的一个优点是它不需要检查空列表:

List.foldl (fn(x,y) => x) 0 [];
(* val it = 0 : int *)