我正在尝试在ocaml中构建LL1解析表。我希望键是一个非终结符input_symbol元组。这可能吗?
我知道您可以做一个stack of tuples:
let (k : (string*string) Stack.t) = Stack.create ();;
提前谢谢!
答案 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"