我想用SML中的foldl檢索列表的最後一個元素,而且從我已經完成的工作中沒有得到很多正確答案,下面是我的壞嘗試,任何幫助!在SML中獲取最後一個元素foldl
fun last p = foldr (fn (x, y) => if (p y) then x else y) [];
我想用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
這會產生一個簽名:
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 *)
我知道它存在於標準庫中,但我想要使用foldl或foldr來實現該函數 – user3038489 2014-09-24 15:52:03