論理学、数学、コンピュータサイエンスにおいて、アリティ(/ ˈ ær ɪ t i / ⓘ )は、関数、演算、または関係式が取る引数またはオペランドの数です。数学では、アリティはランクとも呼ばれますが、[1][2]この言葉には他にも多くの意味があります。論理学と哲学アディシティやディグリーとも呼ばれます。[3][4]言語学では、通常、価数。[5]
一般に、特定の引数を持つ関数や演算子は、2進数や16進数などのn進数ベースの数値体系の命名規則に従います。ラテン語の接頭辞は、-ary接尾辞と組み合わされます。例:
定数は、ヌル演算と呼ばれる、引数 0 の演算の出力として扱うことができます。
また、関数型プログラミング以外では、引数のない関数は意味を持ち、必ずしも定数ではない場合があります(副作用のため)。このような関数は、グローバル変数やシステム全体の状態(時間、空きメモリなど) といった隠れた入力を持つ場合があります。
数学およびプログラミングにおける単項演算子の例としては、単項マイナスおよびプラス、C言語(論理言語ではない)の増分および減分演算子、そして数学における後続関数、階乗、逆数、切り捨て、天井、小数部、符号、絶対値、平方根(主平方根)、複素共役(「1」の複素数の単項だが、抽象度が低い2つの部分を持つ)、ノルム関数などが挙げられます。プログラミングにおいては、 2の補数、アドレス参照、論理否定演算子などが単項演算子の例です。
ラムダ計算および一部の関数型プログラミング言語(特にMLから派生したもの)のすべての関数は技術的には単項ですが、以下の n 項を参照してください。
クワインによれば、ラテン語の分配詞はsinguli、bini、terniなどであり、「unary」ではなく「singulary」という形容詞が正しい。[6] エイブラハム・ロビンソンもクワインの用法に従っている。[7]
哲学では、形容詞monadic は、「〜の姉妹である」などの 2 項関係ではなく、「〜は正方形である」などの1 項関係を説明するために使用されることがあります。
プログラミングと数学で使われる演算子のほとんどは二項演算子です。プログラミングと数学の両方において、これらには乗算演算子、基数演算子、しばしば省略される指数演算子、対数演算子、加算演算子、除算演算子が含まれます。OR 、XOR、AND、IMPなどの論理述語は、通常、2つの異なるオペランドを持つ二項演算子として使用されます。CISCアーキテクチャでは、 2つのソースオペランドを持ち(そして結果をそのうちの1つに格納する)、これが一般的です。
コンピュータプログラミング言語Cとそのさまざまな派生言語 ( C++、C#、Java、Julia、Perlなど)では、三項条件演算子 ?:が提供されています。最初のオペランド (条件) が評価され、それが真であれば式全体の結果は 2 番目のオペランドの値となり、それ以外の場合は 3 番目のオペランドの値となります。この演算子には、2 番目と 3 番目の引数のうち使用されていないものは評価しないという遅延評価戦略があります。 Agdaなどの一部の関数型プログラミング言語では、すべての関数に対してこのような評価戦略があり、結果として通常の関数として実装されます。 Haskellif...then...elseなど他のいくつかの言語でもこれを行うことはできますが、構文上、パフォーマンス上、または歴史的な理由から、代わりにキーワードを定義することを選択しています。
Python言語には三項条件式 があります。Elixirでは同等のものは になります。
x if C else yif(C, do: x, else: y)
Forth言語には三項演算子 も含まれており*/、これは最初の2つの数値(1セル)を乗算し、3番目の数値で割り、中間結果は2つのセルの数値になります。これは、中間結果が1つのセルから溢れてしまう場合に使用されます。
Unix のdc 計算機には、 などの三項演算子がいくつかあります。|これらは、スタックから 3 つの値をポップし、任意の精度で効率的に計算します。
多くの ( RISC )アセンブリ言語命令は 3 項 ( CISC で指定される 2 つのオペランドのみとは対照的 ) またはそれ以上の項であり、これは ( MOV ) レジスタAXに、レジスタBXとCXの合計 (括弧内) である計算されたメモリ位置の内容をロードします。
MOV %AX, (%BX, %CX)
n個の実数の算術平均はn項関数です。
同様に、n個の正の実数の幾何平均はn項関数である。幾何平均の対数は、n個の引数 の対数の算術平均である。
数学的な観点から見ると、n個の引数を持つ関数は、常に、ある積空間の元である単一の引数を持つ関数とみなすことができます。しかし、表記上は、例えば多重線型写像( n ≠ 1の場合、積空間上の線型写像ではない)のように、 n元関数として考える方が都合が良い場合があります。
プログラミング言語でも同じことが言えます。複数の引数を取る関数は、常にタプルなどの複合型の単一の引数を取る関数として定義できます。また、高階関数を持つ言語では、カリー化によって定義できます。
コンピュータサイエンスにおいて、可変個の引数を取る関数は可変引数と呼ばれます。論理学と哲学において、可変個の引数を取る述語や関係は、多段、アナディック、あるいは可変多項式と呼ばれます。[8]
ラテン語由来の名称は、特定の数を表す際によく用いられ、主に「nのグループに属する」という意味のラテン語の分配数に基づいていますが、中にはラテン語の基数や序数に基づくものもあります。例えば、1-ary は、単数形となる分配法則singulīではなく、基数unusに基づいています。
n進法はn 個のオペランド (またはパラメータ)を持つことを意味しますが、「ポリアディック」の同義語としてよく使用されます。
これらの単語は、その数字に関連するものを説明するためによく使用されます (たとえば、アンデナリー チェスは11×11 のボードを持つチェスのバリエーションであり、1603 年の千年紀請願書など)。
関係(または述語)のアリティは、対応する直積における定義域の次元です。(したがって、アリティnの関数は、アリティn + 1を関係として扱います。)
コンピュータプログラミングでは、演算子と関数は構文上区別されることがよくあります。構文上の演算子は通常、1、2、または3個の引数を持ちます(三項演算子?:もよく使用されます)。関数の引数の数は様々ですが、数が多すぎると扱いにくくなる場合があります。一部のプログラミング言語では、可変個引数関数(構文的に可変個の引数を受け入れる関数) もサポートされています。
無料でオンラインで入手可能なモノグラフ: