fun flat [] = []
| flat (l::ls) = l @ flat ls;
这会使列表变平。
有没有办法非递归地执行相同的操作?也许和HOF一起?
答案 0 :(得分:2)
您可以使用高阶函数List.foldr:
fun flat xs = List.foldr (fn (x, acc) => x @ acc) [] xs
正如@Andreas所说,上述功能可以缩短:
fun flat xs = List.foldr op@ [] xs
虽然您希望将flat
作为练习来实现,但标准库中的List.concat却完全相同。