F#のべき乗計算
現在F#の勉強を始めたところで、基礎的なところをぼちぼち習得している段階です。
演算子の話なんですが、F#にはOCamlの系譜だからなのか**
演算子(べき乗)があります。
RubyやPythonなど、関数型の血を引いたいくつかの言語にも備わっている珍しくもない演算子なんですが、
なんとこの演算子、F#においては浮動小数点型でしか使えないのです…。
(コンパイルするとMath.Pow : float * float -> float
になるようなので、当然と言えば当然ですね…)
追記: コンパイル後に Math.Pow
になるのはインライン関数だからで、実際は Pow
静的メソッドを持つ任意の型に対して使える模様。
つまり BigInteger
とかでも使えます。
なので整数計算で**
演算子を使用したい場合は、
let i = 2 ** 3 // ここでコンパイルエラー printfn "%i" i
ではダメで、
let i = 2.0 ** 3.0 |> int printfn "%i" i // 8
などとしなくてはならず、少々面倒くさいです。
どうしてもという場合にはpown
関数がありますが、あくまで関数なので演算子のように中置はできない模様。
let i = pown 2 3 printfn "%i" i // 8 // パイプ演算子を使うと中置っぽくなるが、アホっぽい let i2 = 2 |> pown <| 3 printfn "%i" i2 // 8
ぐぬぬ。