我正在尝试使用SML中的 foldl 检索列表的最后一个元素,而不是从我已经完成的工作中获得很多正确的答案,以下是我的不良尝试之一,任何帮助!
fun last p = foldr ( fn (x, y) => if ( p y ) then x else y ) [];
答案 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 *)