2014-09-24 91 views
0

我想用SML中的foldl檢索列表的最後一個元素,而且從我已經完成的工作中沒有得到很多正確答案,下面是我的壞嘗試,任何幫助!在SML中獲取最後一個元素foldl

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

回答

1

你可以使用List.last即使你要小心,因爲如果你使用一個空的列表上,將引發異常。

對於MosML實現,你可以在http://mosml.org/mosmllib/List.html#last-val

+0

我知道它存在於標準庫中,但我想要使用foldl或foldr來實現該函數 – user3038489 2014-09-24 15:52:03

1

找到文檔作爲RasmusWL提到,List.last是一般使用合適的工具。

它可以通過foldl重新創建:

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

這會產生一個簽名:

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

使用的優點:fn : 'a list * 'a -> 'a

要與foldr使用寫foldl是它不需要檢查一個空列表:

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