在 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) - 的“tail”本身就是有效值:
# 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))”而是为不同的参数引入无限(或者更糟糕的是,有限)数量的新类型和值构造函数的原因是什么?