To jest pierwsza linia F #, którą próbowałem pisać, więc przepraszam, bo prawdopodobnie nie znam właściwych słów kluczowych Google do wyszukiwania.F # Parametry funkcji Typ danych
Próbowałem definiowania funkcji tak:
let sigmoid x deriv = if deriv then x * (1 - x) else 1/(1 + System.Math.Exp(-x))
To daje mi błąd na System.Math.Exp(-x)
:
The type 'float' does not match the type 'int'
Chyba spodziewałem kompilator zrobić typu wnioskowanie na tej funkcji i zdefiniuj x
jako zmienną. Czego tu mi brakuje?
Oto cała sprawa, że próbuję podłączyć:
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
Kompilator podaje 'x' jako' int', ponieważ użyłeś go w rzeczach takich jak '1 - x'. '1' będzie zawsze liczbą całkowitą i można go używać tylko w wyrażeniach arytmetycznych wraz z innymi liczbami całkowitymi. Twój kod kompiluje się, jeśli zmienisz wszystkie swoje zastosowania od "1" do "1.0", co sprawi, że będzie on 'float' i sprawi, że' x' będzie również wywnioskowane jako 'float'. – TeaDrivenDev
(Jest to na przykład inne niż C#, które wymusi typy, jeśli to konieczne, pozwalając tym samym na mieszanie liczb całkowitych i liczb zmiennoprzecinkowych w tych samych wyrażeniach.) – TeaDrivenDev
@TeaDrivenDev Awesome! To był zdecydowanie problem i coś nowego do oglądania w przyszłości. Jeśli chcesz udzielić odpowiedzi, mogę zaakceptować – darkpbj