N进制元组VS对(N-ary tuples vs pairs)

2019-07-19 01:12发布

OCaml中,用不同的arities元组有不同的类型和值构造函数:

# 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)

什么是不解析原因不同arities“(1,2,3)”为“(1,(2,3))”,而是引入了无限(或者甚至更糟的是,有限的)的新的类型和值构造量?

Answer 1:

什么是不解析原因不同arities“(1,2,3)”为“(1,(2,3))”,而是引入了无限(或者甚至更糟的是,有限的)的新的类型和值构造量?

ML的类型系统被设计在追求更强的静态类型检查,以便在编译时尽可能捕捉尽可能多的错误。

你的建议将大大削弱型系统,因为它不再能够区分(1, 2, 3)(1, (2, 3))其是在相反的方向移动。

在实践中,我可以告诉你,ML进行这样的区分在过去我的生产代码,已经引起了真正的错误。 我珍惜在这方面ML设计。



文章来源: N-ary tuples vs pairs
标签: f# ocaml tuples ml