我正在尝试在 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
我的问题是 of 的类型'a
将被限制为 a int
,而我希望此函数与任何可与按位运算符一起使用的类型一起使用,例如 a char
。我尝试使用inline
,但这会在我的库中产生一些问题。有没有办法在不使用的情况下解决这个问题inline
?
为清楚起见进行编辑:该函数将成为库的一部分,并且为不支持按位运算符的类型提供了另一个哈希函数。我希望这个函数可以处理数字类型和/或字符的数组。
编辑 2(问题已解决):内联的问题是我从库中加载函数的方式。代替
let hashedPattern = library.createBuzhash targetPattern
我使用了这个绑定:
let myFunction = library.createBuzhash
let hashedPattern = myFunction targetPattern
尽管该函数是库中的函数,但它将输入类型限制为myFunction
int 。改变我调用函数的方式修复了类型约束问题,并且工作得很好,如下面的答案所示。createBuzhash
inline
inline