ディレクトリ内のすべてのファイルに関数 B を適用する、これに似た関数 A があります。各ファイルには一定数の「エントリ」があります。関数 B は、現在のエントリの合計をパラメータとして取り、現在のファイルで見つかった新しいエントリの数を返します。
また、処理されたファイルの数をカウントし、ファイルが処理されるたびにこのカウントを表示する必要があります。私の必須のバックグラウンドにより、2 つの変更可能な変数と for ループを思い付きました。
let files = Directory.EnumerateFiles sourceDirectory
let mutable numEntries = 0
let mutable numFiles = Seq.length files
let mutable index = 0
for file in files do
printfn "done %d of %d" index numFiles
let numNewEntries = processFile file numEntries
numEntries <- numEntries + numNewEntries
index <- index + 1
それで、いくつか質問があります:
- これをより慣用的で機能的なスタイルで書くにはどうすればよいですか?
- より慣用的なソリューションの利点を説明できますか? 私は関数型プログラミングに非常に慣れていないため、ループの汚い命令の何が問題なのかがわからないことがあります。