【问题标题】:Hashtable in Ocaml where key is a tupleOcaml中的哈希表,其中键是一个元组
【发布时间】:2018-11-05 21:45:29
【问题描述】:

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

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

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

提前谢谢你!!

【问题讨论】:

    标签: parsing tuples ocaml hashtable ll


    【解决方案1】:

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

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

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

    以元组为键的哈希表并不难:

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

    【讨论】:

    • Hashtbl.create 64中的64是什么意思?
    • 这是表的建议初始大小。如果您对表格大小有一个很好的估计,您可以避免稍后调整表格大小,这样会快一点。
    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 2014-08-27
    • 1970-01-01
    • 2011-05-02
    • 2015-02-02
    相关资源
    最近更新 更多