我正试图使用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 *)