次のように、再帰関数によって生成されるシーケンスがある場合:
let rec genConst t = seq { yield t ; yield! genConst (t) }
let inf = genConst 1
infの長さが無限大かどうかをテストするにはどうすればよいですか?
次のように、再帰関数によって生成されるシーケンスがある場合:
let rec genConst t = seq { yield t ; yield! genConst (t) }
let inf = genConst 1
infの長さが無限大かどうかをテストするにはどうすればよいですか?
特定のケースに役立つ場合は、シーケンスを無限にマークするラッパータイプを定義できます。
type InfiniteSeq<'T> = private Infinite of seq<'T> with
interface seq<'T> with
member x.GetEnumerator() = let (Infinite s) = x in s.GetEnumerator()
interface System.Collections.IEnumerable with
member x.GetEnumerator() = let (Infinite s) = x in s.GetEnumerator() :> _
module Seq =
let infinite source = Infinite source
let rec genConst t = seq { yield t ; yield! genConst (t) } |> Seq.infinite
let firstFive = genConst 1 |> Seq.take 5
でポリモーフィズムを取得しseq<_>
、タイプは追加の動作を示します。