2015-04-02 36 views
0

我遇到了模式匹配变长度和类型的元组。匹配不同长度和类型的元组(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;; 

我期待这个函数调用返回2,但我得到了下面的错误,而不是:

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

我对ocaml相当陌生。这个错误正在否定我正在尝试做什么,它与不同长度/类型的元组匹配。

我还有什么其他选择来完成此任务?

+0

嗯,你为什么要创建一个像这样的数据混乱?顺便说一下'let test ='中有一个错字。而你无法匹配它,因为它没有结构(看起来像那样) – 2015-04-02 20:26:42

回答

1

OCaml是一种强类型语言。每个元组大小是不同的类型。所以你不能写你想要的功能。

如果你有特定的元组类型,你可以用这些类型的组合来定义变体类型。这是你在实践中可能会做的。