不変オブジェクトを使用してF#でto doリストを実行する方法を理解しようとしています。 to doリスト(必ずしもF#リストではない)は、データベースから取得されるか、ユーザー入力から収集されるか、XMLやJSONなどから読み取られる可能性があります。その部分はあまり重要ではありません。不変オブジェクトを使用するF#todoリスト
擬似コード:
do for some length of time:
for each item in the to do list:
if item is ready to do:
do item
if it worked:
remove from the todo list
wait a bit before trying again
report on items that weren't ready or that failed.
リストを行うには、少なくとも命令(「ファイルのコピー」、「プロセスの開始」、「電子メールの送信」を持つことになりますF#のレコードのいくつかのコレクションになります、 「昇給を求める」)と、サブコレクションとしてのパラメータが含まれています。
このようなことは、不変オブジェクトだけで行うことはできますか?または、私は.NETリストまたは他の変更可能なオブジェクトを使用する必要がありますか?
私はこのようなことをどのようにまとめていくかということについて、ちょっとしたアイデアを出しています。
UPDATE:(ハーフ)での最初の試みこの事をコーディング:
let processtodo list waittime deadline =
let rec inner list newlist =
match list with
| [] when not List.isEmpty newlist ->
inner newlist []
| head :: tail when head.isReady->
let res = head.action
inner tail (if res = true then tail else list)
| head :: tail when not head.isReady ->
inner tail list
| _ when deadline not passed ->
// wait for the waittime
inner list
| _ -> report on unfinished list
inner list []
私は多くの例で見られる典型的なやり方でこれを書いてみました。私はアイテムが "isReady"と "action"メソッドをサポートしていると仮定しました。私が気に入らないのは、再帰的なテールコールではないため、再帰ごとにスタックスペースを消費します。
不変オブジェクトの処理方法がわからない計画の具体的な部分は何ですか?どうして?あなたは何を問題と認識していますか? –
forループで、doループの次の反復にdoループが表示されないようにリスト項目を削除します – user1443098
To-Doリストから命令を追加/削除する方法を考える代わりに、そのプロセスの後に:完了した指示のないリストを行う。 'to-do-list - >すべての項目の指示を処理する - >完了したタスクなしで新しいリストを返す'(そして、返されたリストを新しいdo-doリストとして使う) –