モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

今日から始める F# “Day 5” シーケンス式、前方パイプ演算子

 まえがきおもいつかなかったなんてそんな!!

概要

  1. シーケンス Seq<'T> 式
  2. 前方パイプ演算子
  3. まとめ

1. シーケンス Seq<'T> 式

 Perl やったことある人ならわかると思うけど、F# なら数列生成に 1..10 的なノリでかける。それ以外にも初項 a、公差 d、末項 b のような seq { a..d..b } という表記もできる。

 ちなみにこのシーケンス式は .NET でいう IEnumerable です。

let seq1 = seq { 1..4 }
let seq2 = seq { 1..2..7 }
let seq3 = seq { 1..10..31 }

[<EntryPoint>]
let main args = 
    printfn "%A" seq1
    printfn "%A" seq2
    printfn "%A" seq3
    0

Result

seq [1; 2; 3; 4]
seq [1; 3; 5; 7]
seq [1; 11; 21; 31]

 前回の match - with 文と組み合わせればこんなこともできる。

let seq1 = seq { 1..50 }
let seq2 = seq {
    for i in seq1 ->
        match i with
        | _ when i % 3 = 0 && i % 5 = 0 -> "FizzBuzz" 
        | _ when i % 3 = 0 -> "Fizz" 
        | _ when i % 5 = 0 -> "Buzz"
        | _ -> i.ToString()
}

 ちなみに for i in fromto do yield ... という表記も可能である。

 ここでネタ切れ…

2. 前方パイプ演算子

 result |> func という感じで関数を呼び出せる演算子。流れが書ける。

let x = 1
let double n = 2 * n
let triple n = 3 * n

と定義しておき、

let y = x |> double |> triple

とかく。let y2 = triple (double x) と同義。もちろん後方パイプ演算子もあってそれも同じように動く。

3. まとめ

 今回は少しつまらない内容かも… ただ前方パイプ演算子とかいう面白いものも読めるようになった。実はこのパイプ演算子が理解してなくてちょいちょい読みづらいなぁ、って思ってたりしたコードがあったのだけど、理解するとそれほど難しくないなーという感じ。

 スクリプトっぽい強さ、それが F# の強みなのかしら? とにかく表現力はすごいなーって思います。次回はなにするかまだ全く考えてないし、もはや 5 日目程度までの内容マスターすれば一通り使えるんじゃないかな? って思ったり。ネタ探し大変… 以上