Stream.fromとクロージャ
特にこうやってその場でstatic変数モドキができるのは覚えとこう……。Haskellでは考えられないし(できるけど普通はやらない←ツッコミ避け)、クロージャがスタックに縛られているDやAdaでも考えられず、今までに経験してこなかったパターンなので。
# let s = Stream.from ((fun () -> let z = ref 0 in fun i -> z := !z + 1; Some !z) ());; val s : int Stream.t = <abstr> # Stream.next s;; - : int = 1 # Stream.next s;; - : int = 2 # Stream.next s;; - : int = 3
外のfun要らなかった。どうもまだGCに頭がついていけてないです。
# let s = Stream.from (let z = ref 0 in fun i -> z := !z + 1; Some !z);; val s : int Stream.t = <abstr>