【发布时间】:2015-07-25 15:49:41
【问题描述】:
我试图更好地理解 OCaml 类型推断。我创建了这个例子:
let rec f t = match t with
| (l,r) -> (f l)+(f r)
| _ -> 1
我想将它应用于任何带有嵌套对的二进制元组(对),以获得叶子的总数。示例:f ((1,2),3)
函数 f 拒绝编译,因为 (f l) 处的类型矛盾:“此表达式具有类型 'a,但预期的表达式类型为 'a * 'b”。
问题:'a 是任何类型,不能也是一对,否则由 _ 情况处理?是否有任何方法可以遍历任意深度的元组而不将它们转换为其他数据结构,例如变体?
PS:在 C++ 中,我会通过创建两个模板函数“f”来解决这类问题,一个用于处理元组,另一个用于处理其他类型。
【问题讨论】:
-
f的类型是什么? -
我认为只是'a->int,所以它可以处理对和其他值......但这只是一个想法。
-
如果
t有一个完全未知的类型('a),那么你就不能对其进行模式匹配。 -
而且 f 内部不可能声明两个辅助函数,一个专门用于对,一个没有任何专门化,并根据 f 参数类型专门调用它们?无论如何,谢谢你的回答:)
标签: ocaml type-inference