fun flat [] = []
| flat (l::ls) = l @ flat ls;
これにより、リストがフラット化されます。
同じ操作を非再帰的に行う方法はありますか? おそらくHOFで?
高階関数List.foldrを使用できます:
fun flat xs = List.foldr (fn (x, acc) => x @ acc) [] xs
@Andreasが言ったように、上記の関数は短縮できます。
fun flat xs = List.foldr op@ [] xs
flat
演習として実装したいのですが、標準ライブラリのList.concatはまったく同じことを行います。