Dies ist die erste Zeile von F #, die ich versucht habe zu schreiben, also entschuldige mich, weil ich wahrscheinlich einfach nicht die richtigen Google-Schlüsselwörter zum Suchen kenne.F # Funktionsparameter Datentyp
Ich habe versucht, eine Funktion wie die Definition so:
let sigmoid x deriv = if deriv then x * (1 - x) else 1/(1 + System.Math.Exp(-x))
Das gibt mir einen Fehler auf dem System.Math.Exp(-x)
:
The type 'float' does not match the type 'int'
Ich glaube, ich war der Compiler erwartet Typinferenz auf diese Funktion zu tun und Definieren Sie x
als Float. Was fehlt mir hier?
Hier ist die ganze Sache, die ich versuche, in stopfen:
let sigmoid x deriv = if deriv then x * (1 - x) else 1/(1 + System.Math.Exp(-x))
[<EntryPoint>]
let main argv =
sigmoid 1.0 false |> printfn "%A"
0
Der Compiler leitet 'x' als' int' ein, weil Sie es in '' 1 - x'' verwendet haben. '1' wird immer eine ganze Zahl sein, und Sie können sie nur in arithmetischen Ausdrücken zusammen mit anderen Ganzzahlen verwenden. Dein Code kompiliert, wenn du all deine Verwendungen von "1" auf "1.0" änderst, was es zu einem "float" macht und bewirkt, dass "x" auch als "float" gedeutet wird. – TeaDrivenDev
(Dies unterscheidet sich beispielsweise von C#, die die Typen nötigenfalls erzwingen und somit das Mischen von Ganzzahlen und Fließkommazahlen in denselben Ausdrücken ermöglichen.) – TeaDrivenDev
@TeaDrivenDev Super! Das war definitiv das Problem und etwas, auf das man in der Zukunft achten sollte. Wenn du eine Antwort geben willst, kann ich akzeptieren – darkpbj