私はF# Wikibook on High Order Functionsのいくつかの例に従っていました。F#関数が "val FunctionName:int - > int"のシグネチャを返すのはなぜですか?
タイトルの下にある2番目のコードスニペット構成機能には次のコードスニペットがあります。
#light
open System
let compose f g x = f (g x)
let xSquared x = x*x
let negXPlusFive x = -x/2.0 + 5.0
let fog = compose xSquared negXPlusFive
// ... Console.WriteLine statements....
私は問題の理解を持っています一つは、私は、それ自体でF#対話型シェル(fsi.exe)でそれを実行すると、私は次のシグネチャを取得
let xSquared x = x*x
です。
> let xSquared x = x*x;;
val xSquared : int -> int
しかし、私は全体のコードスニペットを実行すると、以下のxSquared
を返します。
val compose : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b
val xSquared : float -> float
val negXPlusFive : float -> float
val fog : (float -> float)
なぜxSquared
がfloat
を取り、float
を返すのですか?
F#は、メソッドが作成されたコンテキストについてF#がどれだけ知っているかによって、引数の型を推測するようです。ありがとう。 – Sung
F#は、値の多型性を制限する必要がある場合にのみこれを行います。この場合、xを 'a'にすることはできません。単一のタイプに制限する必要があります。 – MichaelGG