Ich folgte einige Beispiele auf F# Wikibook on High Order Functions.Warum gibt die F # -Funktion eine Signatur von "val FunctionName: int -> int" zurück?
Zweites Code-Snippet unter Titel, Komposition Funktion hat folgenden Code-Ausschnitt.
#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....
Die, den ich Problem Verständnis habe ist
let xSquared x = x*x
Wenn ich es mit F # interaktiv Shell laufe (fsi.exe) von selbst, ich die folgenden Signatur erhalten.
> let xSquared x = x*x;;
val xSquared : int -> int
Aber wenn ich den ganzen Code-Schnipsel laufen, xSquared
gibt die folgenden.
val compose : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b
val xSquared : float -> float
val negXPlusFive : float -> float
val fog : (float -> float)
Warum xSquared
nimmt float
und gibt float
?
Es sieht so aus, als ob F # Argumenttypen ableitet, abhängig davon, wie viel F # über den Kontext weiß, in dem die Methode erstellt wurde. Vielen Dank. – Sung
F # tut dies nur, wenn es den Polymorphismus des Werts einschränken muss. In diesem Fall kann x nicht "a" sein. es muss es auf einen einzigen Typ beschränken. – MichaelGG