在 Ocaml 中,具有不同元组的元组具有不同的类型和值构造函数:
# let a = (1, 2, 3);;
val a : int * int * int = (1, 2, 3)
# let b = (1, (2, 3));;
val b : int * (int * int) = (1, (2, 3))
请注意,第二个示例 (b) 比第一个 (a) 更灵活,因为 b - (2, 3) 的“尾部” - 本身是有效值:
# let (_, c) = b;;
val c : int * int = (2, 3)
# let d = snd b;;
val d : int * int = (2, 3)
为什么不将 "(1, 2, 3)" 解析为 "(1, (2, 3))" 而是为不同的 arities 引入无限(或者更糟糕的是,有限)数量的新类型和值构造函数?