est la première ligne de F # que je l'ai essayé d'écrire, donc des excuses parce que je ne sais probablement pas les bons mots-clés de Google pour la recherche.F # Fonction Paramètre Ce type de données
J'ai essayé de définir une fonction comme ceci:
let sigmoid x deriv = if deriv then x * (1 - x) else 1/(1 + System.Math.Exp(-x))
Cela me donne une erreur sur la System.Math.Exp(-x)
:
The type 'float' does not match the type 'int'
Je suppose que je me attendais le compilateur de faire l'inférence de type sur cette fonction et définir x
comme un flotteur. Qu'est-ce que j'oublie ici?
est ici la chose que je suis en train de brancher:
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
Le compilateur infère '' x' comme int', parce que vous avez utilisé dans des choses comme '1 - x'. '1' sera toujours un entier, et vous ne pouvez l'utiliser que dans les expressions arithmétiques avec d'autres entiers. Votre code compile si vous changez tous vos usages de '' 1' à 1.0', qui fera un '' float' et causer x' être inférées comme 'float' aussi bien. – TeaDrivenDev
(Ceci est différent de C#, par exemple, ce qui forcera les types si nécessaire et permettent ainsi de mélanger des nombres entiers et nombres à virgule flottante dans les mêmes expressions.) – TeaDrivenDev
@TeaDrivenDev Impressionnant! C'était vraiment le problème, et quelque chose de nouveau à surveiller dans le futur. Si vous voulez faire une réponse je peux accepter – darkpbj