我在模式匹配变长和类型的元组方面遇到了麻烦。
let test = ((6, 10), (3, "1", 9), ([2; "5"], 4, 7, "8"));;
let rec extract_min_int arg =
match arg with
| (a, b, c) ->
min (extract_lowest_int a) (min (extract_lowest_int b) (extract_lowest_int c))
| (a, b) -> min (extract_lowest_int a) (extract_lowest_int b)
| `int i -> i
| _ -> infinity
;;
extract_min_int test;;
我希望这个函数调用返回2,但我得到以下错误:
错误:此模式与&#39; a *&#39; b类型的值匹配,但预期模式匹配类型&#39; c *&#39; d *&#39; e <的值/ p>
我对ocaml很新。这个错误正在否定我正在尝试做的事情,这是与不同长度/类型的元组匹配。
我有什么其他选择来完成这项任务?
答案 0 :(得分:1)
OCaml是一种强类型语言。每个元组大小都是不同的类型。所以你不能写出你想要的功能。
如果您有特定的类型元组,则可以使用这些类型组合定义变体类型。这是你在实践中可能会做的。