Q#中为什么用return类型的Unit来描述没有return值的操作;而不是 void 或 none?

Why is the return type Unit used to describe operations that have no return value in Q#; as opposed to void or none?

为什么 Microsoft 在创建 Q# 时决定使用关键字 Unit 而不是 void 或 none 来描述没有 return 值的方法?这是有原因的,还是微软只是想做些不同的事情?

Q# 中的函数和操作始终是元组输入元组输出。 与单例-元组等价('T('T) 是完全相同的类型的原则)一起,这让 Q# 可以统一地表示事物,每个函数和操作只接受一个输入并返回一个输出,每一个都是元组。

这种方法的一个结果是我们可以编写像 Composed<'T, 'U, 'V>(inner : ('T -> 'U), outer : ('U -> 'V)) : ('T -> 'V) 这样的函数,确信我们可以将 any 函数作为 inner 传递,而无需考虑需要多少参数。

为了使此设计保持一致,我们需要一个 "returns nothing" returns 空元组而不是根本没有值的函数或操作。在许多函数式语言(包括 F#)中,空元组的类型称为 unitUnit,遵循类型论中的传统表示法。在 Q# 中,我们决定遵循这一传统来阐明值 () 和类型 Unit.

之间的区别