breakとcontinue

F#で楽々breakとcontinue。継続モナドまじパネぇっす!

モナドわかっていないんですが、なんかかっこいい感じがビジバシ伝わってきます!自分も使いこなせるようになりたい。

ところで、ふと疑問が。普通の?F#でbreakとcontinue相当したかったらどうなるんでしょう。結構考えてそれっぽいものができました。

[<Test>]
let ``emulate continue and break`` () =
let nums = [1..20]
nums
|> Seq.tryFindIndex ((=) 18)
|> Option.fold (fun seq index -> Seq.truncate (index + 1) seq) (Seq.ofList nums)
|> Seq.filter (fun i -> i % 2 = 1)
|> Seq.iter (printfn "%d")


リストの代わりに無限シーケンスを使ってもちゃんと動くので大丈夫そうです。

[<Test>]
let ``emulate continue and break`` () =
let nums = Seq.initInfinite (fun i -> i + 1)
nums
|> Seq.tryFindIndex ((=) 18)
|> Option.fold (fun seq index -> Seq.truncate (index + 1) seq) nums
|> Seq.filter (fun i -> i % 2 = 1)
|> Seq.iter (printfn "%d")