open System
open System.Collections.Generic
[<EntryPoint>]
let main argv =
//記号表
let table = [ for i in 0..9 -> i.ToString() ]
//検索
let search( data : IEnumerable<'T> ) ( target : 'T when 'T : equality ) =
let enumerator = data.GetEnumerator()
enumerator.Reset() |> ignore
let rec sub( enumerator : IEnumerator<'T> ) ( v : 'T when 'T : equality ) =
if enumerator.MoveNext() = true
then
if target = enumerator.Current
then Some( enumerator )
else sub enumerator v
else
None
sub enumerator target
let target = "9"
let x = search table target
printfn "%sの検索結果:%b"
<| target
<| ( target :> IEquatable<string> ).Equals x.Value.Current
//次数
let next( data : IEnumerable<'T> ) ( target : 'T when 'T : equality ) =
match search data target with
| Some result ->
if result.MoveNext() = true
then
( false, result.Current )
else
result.Reset() |> ignore
result.MoveNext() |> ignore
( true, result.Current )
| None ->
raise
<| new ArgumentOutOfRangeException(
target.ToString() + "は存在しません。" )
let y = next table target
printfn "%sの次の数%O、桁上がり%b。"
<| target
<| snd y
<| fst y
//終了
0