13

与えられた型

type C = Circle of int | Rectangle of int * int

そしてコレクション

let l = [ Circle(1); Circle(2); Rectangle(1,2)]

円だけを扱いたい

 let circles = l |> List.filter(fun x-> match x with 
                                        | Circle(l) -> true
                                        | _ -> false)

しかし、私のサークルはまだタイプ C であるため、できません。

for x in circles do
  printf "circle %d" x.??

私がしなければなりません

for x in circles do
  match x with 
  | Circle(l) -> printf "circle %d" l
  | _ -> ())

間違っているようです..

4

2 に答える 2

32

使用するList.chooseような、1つList.filterList.map丸められます。

let circles =
    l |> List.choose(fun x ->
        match x with 
        | Circle l -> Some l
        | _ -> None)

for x in circles do
  printf "circle %d" x
于 2013-09-11T20:01:48.880 に答える
3
l|>Seq.iter (function |Circle l->printf "circle %d" l|_->())
于 2013-09-12T08:50:34.463 に答える