我正在尝试创建一个带有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的新手
答案 0 :(得分:0)
您正在使用可选参数来处理通常使用辅助函数处理的内容。对于更惯用的OCaml样式,您可能希望使用始终采用参数i
的内部函数进行重写。
OCaml中的可选参数不能作为最后一个参数。如果将i
作为函数的第一个参数,则编译器的投诉会减少。
OCaml中的布尔常量为true
和false
。
提供可选参数的语法类似于~i: (i * 2)
。 ~i:
是一个无法拆分的令牌。
除了这些小问题,这是一个很好的代码。 (假设您的向量首先提供最低有效位。)