らくがき

2008/03/30

[F#] seqリストで ”指定した条件の直前まで” 抜き出すにはどうするの?

コード:
let takeUntil p (s : #seq<_>) =
  seq {
        let enum = s.GetEnumerator() in
        while enum.MoveNext() && not (p enum.Current) do
            yield enum.Current 
        done
      }
使用例:
let even_choose i = Seq.choose (fun x -> if (x &&& 1) = 0 then Some(x) else None) i

{1..10} |> even_choose |> takeUntil (fun x -> x > 6) |> Seq.fold ( + ) 0;;
結果:
val it : int = 12
{1..10} -> [1;2;3;4;5;6;7;8;9;10]  // リスト作成
even_choose -> [2;4;6;8;10]        // 偶数のみ選択
takeUntil -> [2;4;6]               // "6より大きい数が現れるまで" のリストをGet
Seq.fold -> 12                     // リストを合計 シチャイマス
 

Labels:

0 Comments:

Post a Comment

<< Home