2016-10-13 21 views
1

私はおそらく新しくF#に言及することから始めるべきであり、これは間違いなく新人質問であることを覚えておいてください。F#関数の入力タイプを定義する/タイプミスマッチを防ぐ

私は今のように2ヶ月間F#をやっていて、私が一般的にF#について不満を感じるのは、間違いです。 「ここには何かがあると予想されていたが、何か他のものが与えられた」

私の先生は、他の言語と違って、F#で自分がどのタイプのものを指しているのかわからないことを覚えています。

私の質問は、関数の入力にどのように型を定義するのですか?

例:

let FoneTwo y x = 
    System.Math.Sqrt(x^2+y^2) 

printfn "%A" (FoneTwo 2.2 3.3) 

フロートが期待されるが、文字列を入力していていることをこのエラー。この弦はどこにありますか?関数呼び出しでは、浮動小数点を使って明示的に呼び出します。だから私は何とかyとxを指定する必要があると思うxは浮動小数ですが、どのように?

一般的に私はこの例に答えただけでなく、この問題を把握するための一般的なルールや方法を教えてください。一般的に、これはたくさん起こるからです。

誰かが私を啓発できますか?

+1

'(^)'は、ML互換性のための文字列連結演算子です。あなたは代わりに '(**)'を使いたいとします。 'x ** 2. + y ** 2.'。 – Lee

答えて

4

オペレータ^は電源が供給されていないことに注意してください。これは文字列の連結(ML互換)です。あなたが変更する必要がありますので、そこオペレータ**が利用可能ですが、それはフロートのためだ

sqrt(pown x 2 + pown y 2) 

代わりpown機能を使用する必要があります

System.Math.Sqrt(pown x 2 + pown y 2) 

をそして、あなたはそれを短縮することができますあなたのコード:

sqrt (x ** 2.0 + y ** 2.0) 

代わりにpown

+0

これは、私がタイプミスマッチを取得した場合、それはおそらく私がそれをやっていると思っていることをしていない演算子の1つでしょうか? – Nulle

+2

はい、特定の型(この場合は文字列)で動作する演算子を使用すると、型推論はこの情報を使用して関数の型を派生させます。 – Gustavo

関連する問題