You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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字段的记录类型——但这个类型根本不存在,所以抛出了错误。

修正后的代码

有两种修正方式:

  1. 明确指定记录字段与变量的对应关系:
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}
  1. 把变量名改成和字段名一致,使用简写语法:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 06:43:23