OCaml开发报错:bool类型表达式预期为unit类型如何解决
问题解答
报错原因
- OCaml 中
=是相等比较运算符,不是赋值操作:你写的acc = obj1不会修改acc的值,只会返回bool类型的比较结果。而没有else分支的if语句要求块内表达式必须返回unit类型(条件不成立时语句默认返回()),二者类型不匹配,因此触发该报错。 - OCaml 默认是纯函数式语言,通过
let绑定的变量不可变,你无法像命令式语言那样直接修改acc的取值,要传递新值只能通过递归调用的参数传递。
修复方案
无需单独编写修改变量的语句,在判断acc < obj1成立时,直接把obj1作为新的累加值传入递归调用即可。同时补充缺失的heap类型定义避免未定义类型报错,还可以简化嵌套的match写法,优化后代码如下:
type object_ = int;; (* 匹配代码元素结构的heap类型定义 *) type heap = ((object_ * 'a) * 'b) list;; let rec get_current_heap_max_object (heap1: heap) (acc: object_) = match heap1 with | [] -> acc | ((obj1, _field1), _tva1) :: tl -> if acc < obj1 then get_current_heap_max_object tl obj1 else get_current_heap_max_object tl acc
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

