Ocaml 中的哈希表,其中键是元组

Hashtable in Ocaml where key is a tuple

我正在尝试在 ocaml 中构建 LL1 解析 table。我希望密钥是一个非终端,input_symbol 元组。这可能吗?

我知道你可以做到 stack of tuples:

let (k : (string*string) Stack.t) = Stack.create ();;

提前致谢!!

OCaml 中散列的键 table 可以是任何可以进行相等比较的类型,并且可以散列为整数。 "vanilla"接口使用内置的多态比较来比较是否相等,以及内置的多态哈希函数。

内置的多态比较函数对于函数类型和循环值失败。

还有一个函数接口,可让您定义自己的相等函数和散列函数。因此,如果您做一些额外的工作(假设您不希望比较函数的相等性),您甚至可以使用包含函数的键的散列 table。

以元组为键做散列table并不难:

# let my_table = Hashtbl.create 64;;
val my_table : ('_weak1, '_weak2) Hashtbl.t = <abstr>
# Hashtbl.add my_table (1, 2) "one two";;
- : unit = ()
# Hashtbl.add my_table (3, 4) "three four";;
- : unit = ()
# Hashtbl.find my_table (1, 2);;
- : string = "one two"