基本的な Q の型

適格な式にはそれぞれ緻密な型があります。 Q には、以下の 2 つの基本型があります。

文字列、整数、実数、およびブール型は 対応するプリミティブ値、regexp は正規表現、オブジェクトはメタクラスの インスタンスを対象としています。

注: オブジェクト は、すべてのメタクラスのインスタンスを含みます。 したがって、パッケージ、クラスなどのすべてのインスタンスには、型オブジェクトがあります。

基本型に加えて、Q 言語は 3 フォームの 構造型 (タプル、コレクション、関数) をサポートします。

タプル

任意の型 α、β、…、ω の場合、α x β x … x ω 式は、 コンポーネント型 α、β、…、ω のタプルの型を示します。例えば、string x integer の型は、 最初のコンポーネントとしての文字列と 2 番目のコンポーネントとしての整数のペアとなります。

コレクション

コレクションは、重複の可能性があるリストです。 任意の型 α の場合、α collection は、コレクションの型が α であることを示します。 例として、object collectionstring collection などがあります。

関数

任意の型 α および β の場合、α → β は、 型 α のパラメーターを取って、型 β の値を返す関数を示します。例えば、stringinteger は、 文字列を取って整数を返す関数の型です。

制限

この方式の型表記は複雑な型にも適宜対応しますが、 実際、現行の実装には、複雑さを制限するいくつかの制約があります。 具体的には、現行の実装では基本型、基本型のタプル、オブジェクト・コレクション文字列コレクション がサポートされ、 さらに、これらの型のいずれかを取っていずれかを返す関数がサポートされています (戻りの型のタプルを除く)。 また、型 (objectstring) x object collectionstring collection (組み込み関数のマップ型)、(objectboolean) x object collectionobject collection (組み込み関数のフィルター型) など、 他にもトラバースとソート用の型の特殊なサポートもあります。

複雑な型の例

より複雑な型の例を以下に示します。

  • string x realboolean: 2 つのコンポーネント (最初の型が 文字列 で、2 番目の 型が実数 ) のタプルを取り、ブール を返す関数。
  • (object → string) x object collection → string collection: 関数 (object → string の型) と オブジェクト・コレクションを取り、文字列コレクションを返す関数。

フィードバック