OCaml如何实现两个float元组相加并得到对应float元组返回类型?
错误原因
- 最初的代码使用了
+运算符,这是int类型专属的加法运算符,所以类型推导默认将元组内的元素判定为int类型,最终得到int元组相加的函数类型。 - 第二次修改时给参数加的类型注解错误:你将a、b标注为了单个
float类型,但实际这两个参数是float组成的二元组,类型应该是float * float,所以调用fst/snd取元组元素时会触发类型不匹配错误。
正确写法
有两种常见的实现方式:
写法1:给参数加正确的类型注解,配合float加法运算符+.
let add (a: float * float) (b: float * float) = fst a +. fst b, snd a +. snd b
写法2:用模式匹配解构元组,代码更易读
let add (x1, y1) (x2, y2) = x1 +. x2, y1 +. y2
如果需要明确指定类型避免推导偏差,可以给解构后的元组加注解:
let add ((x1, y1): float * float) ((x2, y2): float * float) = x1 +. x2, y1 +. y2
以上代码编译后得到的类型就是你需要的val add : float * float -> float * float -> float * float。
内容的提问来源于stack exchange,提问作者Blib
相关产品推荐
相关产品推荐

