【问题标题】:Optional Parameter error in ocamlocaml 中的可选参数错误
【发布时间】:2014-10-23 14:27:39
【问题描述】:

我正在尝试创建一个函数,该函数将采用真或假向量。这个向量代表一个二进制数,我想在函数中将它转换为整数 这是我的代码

let rec int_of_vec x ?(i=1) = match x with
      [] -> 0
    | True::t -> (1*i) + int_of_vec t ~(i:(i*2))
    | False::t -> 0 + int_of_vec t ~(i:(i*2))
;;

但我在处理可选参数时不断出错 我不确定我到底做错了什么,因为我对 Ocaml 还是很陌生

【问题讨论】:

    标签: ocaml optional-parameters


    【解决方案1】:

    您正在使用可选参数来处理通常由辅助函数处理的内容。对于更惯用的 OCaml 样式,您可能希望使用 always 采用参数 i 的内部函数重写。

    OCaml 中的可选参数不能作为最后一个参数。如果您将i 设为函数的第一个参数,编译器的抱怨就会减少。

    OCaml 中的布尔常量是truefalse

    提供可选参数的语法类似于~i: (i * 2)~i: 是一个无法拆分的单一令牌。

    除了这些小问题之外,这是很好的代码。 (假设您的向量首先提供最低有效位。)

    【讨论】:

    • 非常感谢您,我刚刚使用了您的编辑,并且成功了。但我很好奇为什么在这种情况下辅助函数比可选参数更合适
    • 除非这是将多个向量组合成一个数字的更大计算的一部分,否则函数的类型会包含一个对调用者无用的无关参数。这使得函数更难理解并且更容易出错。换句话说,i 参数是实现的一部分,不应该是接口(类型)的一部分。
    猜你喜欢
    • 2014-07-05
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多