【问题标题】:OCaml Core List.Assoc.findOCaml 核心列表.Assoc.find
【发布时间】:2017-06-05 16:39:07
【问题描述】:

我在运行 Real World OCaml 一书中的一些代码时遇到了问题。代码 sn-p 在github 上。特别是,我在第 6 行遇到类型错误:

List.Assoc.find counts line

我使用的是 OCaml 4.04.1,根据 utop,List.Assoc.find 的类型签名是:

('a, 'b) List.Assoc.t -> equal:('a -> 'a -> bool) -> 'a -> 'b option = <fun

请注意上面的代码 sn-p 中缺少的非可选参数 equal。但是,根据最新的(截至 2017 年 6 月)documentation for List.Assoc.find,equal 参数是可选的。

equal 参数的用途是什么?

【问题讨论】:

    标签: ocaml


    【解决方案1】:

    该函数通过列表查找第一个元素等于您给出的值的对。如果没有找到相等的元素,则返回 Some (snd pair) 或 None。 equal 参数允许您指定相等的定义,以防您不想要内置的 =。

    我目前使用 OCaml 4.03.0 并安装了带有 OPAM 的 Core。 equal 参数对我来说是可选的:

    # List.Assoc.find;;
    - : ('a, 'b) Core.Std.List.Assoc.t ->
        ?equal:('a -> 'a -> bool) -> 'a -> 'b option
    

    【讨论】:

    • 此代码适用于我:let assoc = [("one", 1); ("two",2); ("three",3)] ;;List.Assoc.find assoc "two" ~equal:(=);;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多