2015-04-02 33 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是一種強類型語言。每個元組大小是不同的類型。所以你不能寫你想要的功能。

如果你有特定的元組類型,你可以用這些類型的組合來定義變體類型。這是你在實踐中可能會做的。