匹配不同长度和类型的元组 (ocaml)

Matching tuples of varying length and type (ocaml)

我在匹配不同长度和类型的元组时遇到问题。

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;;

我期待此函数调用 return 2,但我收到以下错误:

错误:此模式匹配 'a * 'b 类型的值,但预期模式匹配 'c * 'd * 'e 类型的值

我是 ocaml 的新手。这个错误正在否认我正在尝试做的事情,即匹配不同 length/type.

的元组

我还有什么其他选择可以完成这项任务?

OCaml 是一种强类型语言。每个元组大小都是不同的类型。所以你不能随心所欲地写一个函数。

如果您有特定的类型元组,您可以定义仅包含这些类型组合的变体类型。这就是您在实践中可能会做的事情。