OCaml报错‘Unbound record field mid_x’原因及解决咨询
问题原因与解决方法
错误解释
Unbound record field mid_x 这个错误的意思是:你尝试创建一条记录时使用了mid_x作为字段名,但当前代码里并没有定义过包含mid_x字段的记录类型。
代码问题分析
你的point类型定义的字段是x和y,但在midpoint_segment函数的返回语句里写了{mid_x; mid_y}。OCaml的记录简写语法有个前提:只有当变量名和记录字段名完全一致时,才能用{字段名}这种简写形式(等价于{字段名=变量名})。
你现在的变量名是mid_x、mid_y,和point的字段名x、y不匹配,OCaml就会误认为你要创建一个新的、包含mid_x字段的记录类型——但这个类型根本不存在,所以抛出了错误。
修正后的代码
有两种修正方式:
- 明确指定记录字段与变量的对应关系:
type point = {x : float; y : float} type segment = {startp : point; endp : point} let midpoint_segment {startp; endp} = let mid_x = (startp.x +. endp.x) /. 2.0 in let mid_y = (startp.y +. endp.y) /. 2.0 in {x = mid_x; y = mid_y}
- 把变量名改成和字段名一致,使用简写语法:
type point = {x : float; y : float} type segment = {startp : point; endp : point} let midpoint_segment {startp; endp} = let x = (startp.x +. endp.x) /. 2.0 in let y = (startp.y +. endp.y) /. 2.0 in {x; y}
内容的提问来源于stack exchange,提问作者geek123
相关产品推荐
相关产品推荐

