F# と overload
id:NyaRuRu:20080609:p2 の補足.F# で LINQ の Enumerable.Any 的なものを作ってみます.
引数の個数 (というより引数は 1 つで tuple の違いと見るべき?) によるオーバーロード.
#light open System open Seq type MySeq = static member any<'a>(source:seq<'a>) = nonempty source static member any<'a>(source:seq<'a>, pred:'a->bool) = exists pred source MySeq.any(seq {0 .. 10 }) |> print_any MySeq.any(seq {0 .. 10 }, fun i -> i > 10) |> print_any
truefalse
optional arguments *1を使ってこうも書けます.
#light open System open Seq type MySeq = static member any<'a>(source:seq<'a>, ?pred:'a->bool) = match pred with | None -> nonempty source | Some f -> exists f source MySeq.any(seq {0 .. 10 }) |> print_any MySeq.any(seq {0 .. 10 }, fun i -> i > 10) |> print_any
truefalse
*1:注:これは OCaml-style の optional arguments ではありません.