3
fun flat [] = []   
  | flat (l::ls) = l @ flat ls;

これにより、リストがフラット化されます。

同じ操作を非再帰的に行う方法はありますか? おそらくHOFで?

4

1 に答える 1

3

高階関数List.foldrを使用できます:

fun flat xs = List.foldr (fn (x, acc) => x @ acc) [] xs

@Andreasが言ったように、上記の関数は短縮できます。

fun flat xs = List.foldr op@ [] xs

flat演習として実装したいのですが、標準ライブラリのList.concatはまったく同じことを行います。

于 2013-02-23T00:26:46.433 に答える