元数
在邏輯、數學及電腦科學裡,函數或運算的元數是指所需的參數或運算元的數量。關係的元數則是指其對應之笛卡兒積的維度。
元數主要用在下面類型的函數之中: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