元数
在逻辑、数学及电脑科学里,函数或运算的元数是指所需的参数或算子的数量。关系的元数则是指其对应之笛卡儿积的维度。
元数主要用在下面类型的函数之中:f : V → S,其中的V ⊂ Sn,且S是某个集合。此类函数通常称为在S上的“运算”,且称n是这个运算的元数。
例子
“元数”一词其实在一般情况之下并不怎么常使用。例如,与其说“加法运算的元数是2”或“加法是个元数2的运算”,更多人会说“加法是个二元运算”。
0元
有时,将一个常数视为一个0元运算或0元函数是很有用的。
而且,在非函数编程语言里,一个没有参数的函数可以是有意义的,且不必然是个常数(因为有副作用)。通常,此类函数实际上会有个“隐藏输入”,可能是个全局变数,包含整个系统的状态(时间、未使用记忆体、…)。后者是个很重要的例子,即使在“纯”函数编程语言里也有其存在。
一元
在数学和编程语言中,一元运算的例子包括正负值、C语言之类编程语言中的递增和递减运算子,以及数学中的阶乘、倒数、高斯符号、绝对值、共轭复数和范数。
所有在λ演算中的函数,以及部分函数编程语言(尤其是那些衍生自ML语言的编程语言)中的函数,在技术上都是一元的(见柯里化)。
二元
大部分在编程语言中出现的运算子多是二元运算的形式。在编程语言及数学里,这些二元运算可以是乘法、加法及除法。“或”、“异或”、“且”、“蕴涵”等逻辑联结词一般也被当做二元运算子使用。
三元
在C语言、C++、C#、Java、Perl等各种编程语言中,都会有个三元运算子“?:
”,称为条件运算符。Forth中也有一个三元运算子“*/
”。这个运算子会将前两个数字相乘,然后再除以第三个数字,中介的乘积结果会以两倍的位元储存,以防中介的结果溢位。dc中也有一些三元运算子,如“|”,会从堆叠中弹出三个值来,且以随意的精确度有效地计算出来。另外,许多组合语言的指令为三元或更多元,如“MOV %AX, (%BX,%CX)”,会将暂存器BX和CX的和所指的记忆体位址中的内容载入(MOV)暂存器AX之中。
n元
从数学的角度来看,有n个参数的函数总是可以想成是有1个参数的函数,其参数为某个积空间的元素。不过,在标记上,当做是n元函数会比较简单,如多重线性映射(此映射在n≠1时不是积空间上的线性映射)。
在编程语言中也一样,有数个参数的函数总是可以被定义成以某个复合类型做为单一参数的函数,如多元组,或柯里化的高阶函数。
参考资料
- Quine, W. V. O., Mathematical logic, Cambridge, MA: Harvard University Press, 1940