5

かなり些細な質問ですが、簡単なグーグル検索では答えが得られませんでした。

シーケンスの再帰関数を記述する標準的な方法は何ですか? リストの場合、空のリストと頭と尾のパターンでパターン マッチングを行いますが、シーケンスに相当するものは何ですか?

4

2 に答える 2

8

シーケンスの再帰関数を作成することはめったにないため、これを行う標準的な方法はありません。

Seq モジュールのさまざまな高階関数を調べる必要があります。多くの場合、それらは十分すぎるため、再帰関数を自分で作成する必要はありません。

シーケンスを再帰的に生成するには、シーケンス式がシンプルで直感的な方法です。

let rec allFiles dir =
    seq { yield! Directory.GetFiles dir
          for d in Directory.GetDirectories dir do
            yield! allFiles d }

シーケンスを分割して再帰的に操作する必要がある場合、それは間違っています。F# PowerPack から LazyList を操作しList、結果をシーケンスに戻す必要があります。

于 2012-07-12T12:30:08.913 に答える
0

シーケンスは評価されていない (そして理論的には無限である可能性がある) ため、シーケンスの末尾を取得する方法はありません。そのため、末尾を関数に再帰的に渡すことはできません。Seq.iter または yield を使用するだけです。シーケンスを実行します。

于 2012-07-12T12:27:31.753 に答える