ocaml中的可选参数错误

ocaml中的可选参数错误,ocaml,optional-parameters,Ocaml,Optional Parameters,我正在尝试创建一个函数,它将接受一个向量true或false。这个向量表示一个二进制数,我想在函数中将它转换成一个整数 这是我的密码 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)) ;; 但我在处理可选参数时不断出错 我不确

我正在尝试创建一个函数,它将接受一个向量true或false。这个向量表示一个二进制数,我想在函数中将它转换成一个整数 这是我的密码

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样式,您可能希望使用始终采用参数
i
的内部函数进行重写

OCaml中的可选参数不如最后一个参数好用。如果将
i
作为函数的第一个参数,那么编译器的投诉就会减少

OCaml中的布尔常量是
true
false

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


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

非常感谢您,我刚刚使用了您的编辑,效果很好。但是我很好奇为什么在这种情况下,助手函数比可选参数更合适除非这是将多个向量组合成一个数字的更大计算的一部分,否则函数的类型包括一个对调用方不有用的无关参数。这使得函数更难理解,更容易出错。换句话说,
i
参数是实现的一部分,不应该是接口(类型)的一部分。