OCamlのExtLibのEnum
OCamlのライブラリExtLibの中のEnumについて質問します。
以下を実行しました。
open Printf
let tee f e =
let e' = Enum.clone e in
f e';
e
let term e =
Enum.iter (fun _ -> ()) e
let f e =
Enum.map
(fun inp ->
let out = inp * 2 in
printf "in f\t%d\t%d\n" inp out;
out)
e
let () =
let e = Enum.init 5 (fun i -> i) in
e
|> f
|> tee
(fun e ->
Enum.iter (printf "in tee\t%d\n") e)
|> term
結果は以下です。
in f 0 0
in tee 0
in f 1 2
in tee 2
in f 2 4
in tee 4
in f 3 6
in tee 6
in f 4 8
in tee 8
in f 0 0
in f 1 2
in f 2 4
in f 3 6
in f 4 8
上記のとおり、"in f"の行が全部で10行、出力されます。
期待していたのは、"in f"の行が5行、出力される動作です。
なぜ期待どおりの動作でないのかを教えてください。