スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#雑記 falseとtrueを交互に返す方法(続き)

前回は無限数列を作成してひとつづつ取り出すという手法で考えてみましたが、今回は循環という視点で考えてみました。
 
> open System.Collections.Generic                
 
type CirAgr<'a>(ie : IEnumerable<'a> ) =
    let e = ie.GetEnumerator()
    member this.cNext() =
        if e.MoveNext()  then
            e.Current 
        else
            e.Reset()
            if e.MoveNext() then
                e.Current
            else 
                failwith "empty" ;;
 
type CirAgr<'a> =
  class
    new : ie:IEnumerable<'a> -> CirAgr<'a>
    member cNext : unit -> 'a
  end
 
では使ってみます。
 
> let flipflop3 = new CirAgr<bool>([|true;false|]);;
val flipflop3 : CirAgr<bool>
 
> flipflop3.cNext();;
val it : bool = true
> flipflop3.cNext();;
val it : bool = false
> flipflop3.cNext();;
val it : bool = true
 
> let day3 = new CirAgr<_>(seq[|"morning";"noon";"night"|]);;
val day3 : CirAgr<string>
 
> day3.cNext();;
val it : string = "morning"
> day3.cNext();;
val it : string = "noon"
> day3.cNext();;
val it : string = "night"
> day3.cNext();;
val it : string = "morning"
 
> let marchOf365 = new CirAgr<_>([1;2]);;
val marchOf365 : CirAgr<int>
 
> marchOf365.cNext();;
val it : int = 1
> marchOf365.cNext();;
val it : int = 2
> marchOf365.cNext();;
val it : int = 1
> marchOf365.cNext();;
val it : int = 2
 
> let emp = new CirAgr<int>([]);;
val emp : CirAgr<int>
 
> emp.cNext();;
System.Exception: empty
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。