スカラーまたはベクトル(この場合DiffSharpのDタイプとDVタイプ)で動作する数値コードを記述しようとしています。時々、私が使用できるようにしたいのいずれかので、私は彼らのために差別組合を定義した:差別化された共用体の演算子オーバーロード
type IBroadcastable =
| Scalar of D
| Vect of DV
事業者の多くはすでにので、私はコードを追加記述IBroadcastable
にそれらを使用するために、これらのタイプの両方のために、オーバーロードされていますこのように組合に:
static member Exp x =
match x with
| Scalar x -> Scalar (exp x)
| Vect x -> Vect (exp x)
これは非常に冗長なようです。新しいオーバーロードを書く必要なく、私が組合でオペレータを使用できる方法はありますか?あるいは、私は異なるパターン(すなわち、差別化された組合ではない)を使用すべきですか?私はこのタイプを使用したいものの例:
let ll (y: IBroadcastable) (theta: IBroadcastable) = y*theta-(exp theta)
*
と-
は、それが自分自身を記述する必要があることは理にかなっていますが、exp
オペレータが簡単である、より複雑な行動(配列放送を)持っています、上記のように。これは関数である必要があります。なぜなら、y引数を部分的に適用し、DiffSharpでグラデーションを取得し、theta引数に関して最大化することができるようにしたいからです。
組合がなぜ必要なのかわかりません。 'D'や' DV'の演算子を使っているのと比べると、今のところ手に取っているものは何ですか? –
@FyodorSoikin私は、1つの引数がどちらかの型になる可能性のある関数を書くことを試みています。注:私はかなり新しいF#プログラマーですが、それがはっきりしない場合は。 –
どのようにその機能を使用しますか?そしてそれはどのように実装されますか?なぜ機能の代わりに実装を使用することができませんでしたか? –