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"
我正在尝试在 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"