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



我正试图使用SML中的foldl来检索列表的最后一个元素,但从我已经做的事情中没有得到很多正确的答案,下面是我的一个糟糕尝试,任何帮助!

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

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

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

正如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 *)

最新更新