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

时间:2018-11-05 21:45:29

标签: parsing tuples ocaml hashtable ll

我正在尝试在ocaml中构建LL1解析表。我希望键是一个非终结符input_symbol元组。这可能吗?

我知道您可以做一个stack of tuples

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

提前谢谢!

1 个答案:

答案 0 :(得分:2)

OCaml中哈希表的键可以具有可以比较相等性的任何类型,并且可以哈希为整数。 “香草”界面使用内置的多态比较进行相等性比较,并使用内置的多态哈希函数。

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

还有一个函数接口,可让您定义自己的相等和哈希函数。因此,如果您做一些额外的工作(假设您不希望比较功能是否相等),甚至可以创建一个包含包含函数的键的哈希表。

用元组作为键创建哈希表并不难:

# 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"