いくつかのビット単位の操作を提供する F# でライブラリ¹ を作成しています。できるだけ多くの関数がinline
静的な型パラメーターを持つ let バインディングであることを確認したいと考えています (これにより、1 つの関数を記述し、それをint16
、int32
、およびおそらくbignum
オーバーヘッドがほとんどない場合でも)。このルートは、ある時点で確実に機能しなくなります。上記のライブラリによって提供される機能の一部は、やや複雑です。
¹注: public インターフェイスを介してインライン let バインディングを公開する際の問題については承知しています。
ただし、これを可能な限り伸ばしたいと思います。現在、人口カウントアルゴリズムをこの形式で記述しようとしていますが、問題に直面しています。0x3333...
たとえば、これらのアルゴリズムに表示されるマスクをエンコードする方法がわかりません。いくつかの余分なビットトリックを使用して、シフト定数などを回避できます。
F# の型推論と静的型パラメーターを使用するか、ビット操作を使用して、思いどおりにアルゴリズムを作成するために使用できるトリックはありますか? これらの種類の定数を静的ジェネリック関数でエンコードする方法はありますか?
より漠然とした質問: 特に数値のコンテキストで、静的型パラメーターを最大限に活用するために頼ることができる特定のものはありますか? たとえば、私は と を頻繁に使用GenericOne
しGenericZero
ます。私が見逃したかもしれない、このようなものがもっとありますか?