a wandering wolf

Does a wandering wolf dreams of a wondering, sometimes programming sheep?

このエントリーをはてなブックマークに追加

シーケンスに要素を追加する

F# におけるシーケンス、つまり seq<’T> (.NET 的には IEnumerable<T>) に要素を追加する関数が欲しかったんですが、それが Microsoft.FSharp.Collections.Seq モジュールにないなぁと思っていたところ、有用なアドバイスを頂きました。

早速実装してみます。

// 対象のシーケンス
let ns = seq [1 .. 10]

// シーケンス出力用のヘルパー関数。
let printSeq xs = xs |> Seq.toList |> printfn "%A"

// 先頭に追加する
seq {
  yield 0
  yield! ns
} |> printSeq
//> [0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10]

// 末尾に追加する
seq {
  yield! ns
  yield 11
} |> printSeq
//> [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11]

ステキ!思ったように動作しています。

このコード、無限シーケンスであってもシーケンス自体を評価していないので、問題なく使えていいですね。