f# で巡回多項式ハッシュ関数を実装しようとしています。ビット単位の演算子 ^^^ と <<< を使用します。配列をハッシュする関数の例を次に示します。
let createBuzhash (pattern : array<'a>) =
let n = pattern.Length
let rec loop index pow acc =
if index < n then
loop (index+1) (pow-1) (acc ^^^ ((int pattern.[index]) <<< pow))
else
acc
loop 0 (n-1) 0
私の問題は、 の型'a
が に制約されることですがint
、この関数は、ビット単位の演算子で機能する任意の型 (たとえば、char
. を使用してみinline
ましたが、ライブラリのさらに下の方で問題が発生します。を使用せずにこれを修正する方法はありinline
ますか?
わかりやすくするために編集: 関数はライブラリの一部になり、ビット単位の演算子をサポートしない型には別のハッシュ関数が提供されます。この関数を数値型および/または文字の配列で動作させたいです。
編集2(問題解決):インラインの問題は、ライブラリから関数をロードする方法でした。それ以外の
let hashedPattern = library.createBuzhash targetPattern
私はこのバインディングを使用しました:
let myFunction = library.createBuzhash
let hashedPattern = myFunction targetPattern
関数はライブラリ内の関数ですが、入力型myFunction
を int に制約します。関数の呼び出し方法を変更すると、型制約の問題が修正され、以下の回答が示すように完全に正常に動作します。createBuzhash
inline
inline