fun flat [] = []
| flat (l::ls) = l @ flat ls;
這將扁平列表。如何在sml/nj中以非遞歸方式展平列表?
有沒有辦法以非遞歸方式做同樣的操作?也許與HOFs?
fun flat [] = []
| flat (l::ls) = l @ flat ls;
這將扁平列表。如何在sml/nj中以非遞歸方式展平列表?
有沒有辦法以非遞歸方式做同樣的操作?也許與HOFs?
你可以使用高階函數List.foldr:
fun flat xs = List.foldr (fn (x, acc) => x @ acc) [] xs
正如@Andreas說,上面的函數可以被縮短:
fun flat xs = List.foldr [email protected] [] xs
雖然你想實現flat
作爲練習,標準庫中的完全一樣。
遞歸有什麼問題?避免它會使它看起來更像程序編程在我看來 – Ulises 2013-02-23 00:21:08
我想使用HOP或許,如果可能的話 – Dickson 2013-02-23 00:22:56