パステルステッチの値は以下のデータ型を持つ。

このうち、ベクトルは有限集合の特殊な場合であり、有限集合は無限集合の特殊な場合である。

ブーリアン

ブーリアン型 (Boolean) は「真」と「偽」の 2 種類の値を持つ。truemain 複合名と falsemain 複合名はそれぞれ真と偽を表す。

ブーリアン型の値に対して論理演算 ^and, ^or, ^not を使用できる。意味はそれぞれ、論理積、論理和、論理否定である。ブーリアン型でない値に対してこれらの論理演算を行った場合は、ブーリアン型でない値は真と解釈される。同様に、条件分岐では、ブーリアン型でない値は真と解釈され、ブーリアン型の false だけが偽と解釈される。

自然数

パステルステッチの自然数 (natural number) は 0 以上の整数を表現する。自然数の最大値は実装により異なる。そのため、実装によってはオーバーフローすることがある。

自然数に対して演算子 +, −, ∗, / でそれぞれ加算、減算、積算、除算ができる。自然数に対してこれらの演算を行ったとき、演算の結果も自然数である。0 で除算したときの動作は実装により異なる。また、除算が割り切れない場合の結果は実装により異なるが、いずれの実装でも、誤差が 1 以下の値が返される。

自然数の大小関係は演算子 =, <, ^le で比較できる。

互換性についての注意 言語仕様 2015 では自然数型が導入された。これに伴い、複数のプリミティブ演算で、引数および戻り値の型が有理数から自然数に変更された。過去の言語仕様では、プリミティブ演算が自然数を必要とする場面では、分母が 1 の有理数が使用されていた。この変更により、既存のプログラムは大規模な変更が必要になる可能性がある。

有理数

パステルステッチの有理数 (rational number) は符号、分子、分母の組である。符号は有理数が正であるか負であるかを表す。分子は 0 以上の整数であり、分母は 0 より大きい整数である。ただし、分子が 0 であるとき、符号は正で、分母は 1 である。また、分子と分母は既約である。分子と分母の最大値は実装により異なる。そのため、実装によってはオーバーフローすることがある。

; 演算子の引数は左辺と右辺がともに自然数である必要がある。この演算子は、左辺を分子、右辺を分母とする有理数を返す。

有理数に対して演算子 +, −, ∗, / でそれぞれ加算、減算、積算、除算ができる。有理数に対してこれらの演算を行ったとき、演算の結果も有理数である。0 で除算したときの動作は実装により異なる。

プリミティブ演算 get numeratormainget denominatormain は、それぞれ、有理数から分子と分母を取り出す。取り出された分子と分母はいずれも自然数である。そのため、有理数の符号は無視される。

有理数の大小関係は演算子 =, <, ^le で比較できる。

ベクトル

パステルステッチのベクトル (vector) は他のプログラミング言語の vector とは異なる。

ベクトルは基底ベクトル (basis vector) と複合ベクトル (compound vector) に分類される。基底ベクトルは以下のような性質を持つ。

基底ベクトルはさらに有名ベクトルと無名ベクトルに分類される。

基底ベクトルに対して有理数倍と加算を行うことで得られるベクトルが複合ベクトルである。なお、零ベクトル (null vector) は複合ベクトルに分類される。任意の基底ベクトルに有理数の 0 を積算することで零ベクトルを作ることができるためである。

ベクトルとベクトルを加算または減算することができる。演算子 + の左辺と右辺をともにベクトルとすると、それぞれベクトルの加算と減算を意味する。また、左辺のない + は右辺の値をそのまま演算の結果とする。左辺のない は −1 倍を意味する。

演算子 の左辺と右辺の一方が有理数で、もう一方がベクトルであるとき、有理数とベクトルの積を表す。有理数とベクトルの積はベクトルである。また、演算子 / の左辺がベクトルで右辺が有理数であるとき、右辺の逆数と左辺の積を表す。ただし、0 で除算したときの動作は実装により異なる。

演算子 ∗ の左辺と右辺がともにベクトルであるとき、内積を表す。ベクトルの内積は有理数である。

ベクトルが等しいかどうか比較することができる。演算子 = の両辺がベクトルであるとき、両辺のベクトルが等しいかどうか比較する。また、演算子 <^le の両辺がベクトルであるとき、ベクトルの順序を比較する。ベクトルの順序は実装により異なるが、いずれの実装でも順序性を満たす。

その他、以下のようなプリミティブ演算がある。

有限集合

パステルステッチで集合とはベクトルの集合である。集合には有限集合 (finite set) と無限集合 (infinite set) がある。

2 個の有限集合があるとき、和集合、積集合、差集合を計算できる。和集合はコロンで、積集合と差集合はそれぞれ演算子 ^intersection^setminus で表される。また、2 個の有限集合があるとき、演算子 =^subset で比較できる。前者は完全一致、後者は包含を意味する。

演算子 <^le の両辺が有限集合であるとき、有限集合の順序を比較する。有限集合の順序は実装により異なるが、いずれの実装でも順序性を満たす。

加算 + の両辺が有限集合であるとき「総当たり和」を意味する。これは、左辺の有限集合と右辺の有限集合からそれぞれ1 個ずつのベクトルを選んで、それらを加算して得られるベクトルを、すべての組み合わせについて集めた集合である。同様に、演算子 の両辺が有限集合であるとき「総当たり差」を意味する。これは、左辺の有限集合と右辺の有限集合からそれぞれ1 個ずつのベクトルを選んで、前者から後者を減算して得られるベクトルを、すべての組み合わせについて集めた集合である。

ベクトルの場合と同様に、左辺のない + は右辺の値をそのまま演算の結果とする。また、左辺のない は −1 倍を意味する。

演算子 の左辺と右辺の一方が有理数で、もう一方が有限集合であるとき、演算の結果は、有限集合に属するすべてのベクトルと有理数との積を集めた集合である。同様に、演算子 / の左辺が有限集合で右辺が有理数であるとき、右辺の有理数の逆数と左辺の有限集合に属するすべてのベクトルとの積を集めた集合を表す。ただし、0 で除算したときの動作は実装により異なる。

ベクトルは有限集合の特殊な場合である。集合に対する演算にベクトルを与えた場合、ベクトルは要素が 1 個の有限集合として演算される。また、集合に対する演算の結果が、要素が 1 個の有限集合であるとき、実際の演算の結果はベクトルになる。

sizemain プリミティブ演算で有限集合の要素数が得られる。要素数は自然数である。空集合の要素数は 0、ベクトルの要素数は 1 である。

pickmain プリミティブ演算は有限集合の要素のうち 1 個のベクトルを得る。どのベクトルを得られるかは実装により異なる。pick プリミティブ演算の引数がベクトルであるとき、戻り値はそのベクトルそのものである。また、pick プリミティブ演算の引数が空集合または無限集合であるとき、ブーリアン型の false を返す。

distributemain プリミティブ演算は「ベクトルの分配」を表す。distribute プリミティブ演算は vector, set, auxiliary set という 3 個の引数を取る。この演算は、vector 引数をベクトル x、引数 setauxiliary set をそれぞれ集合 α, β としたとき、以下の数式を満たすベクトルの組 yz を探す。

このような組み合わせが見つかれば、distribute プリミティブ演算の戻り値は上記のベクトル y である。見つからなければブーリアン型の false を返す。

無限集合

無限集合は span プリミティブ演算で作成する。span プリミティブ演算は main 引数を取り、この引数の値は有限集合である必要がある。さらに、実装によっては、この引数は基底ベクトルの有限集合である必要がある。このとき得られる無限集合は、与えられた有限集合の各要素と任意の有理数との積の和 (すなわち、与えられた有限集合の各要素の線型結合) として得られるベクトルの集合である。

無限集合と無限集合の和集合を計算できる。それに対して、無限集合と無限集合の積集合を計算することはできない。積集合では、左辺か右辺の少なくともいずれかが有限集合である必要がある。また、差集合の右辺は無限集合でもよいが、差集合の左辺は有限集合でなければならない。無限集合と無限集合が同一であるかどうか比較しようとした場合、正しく比較されることは保証されない。集合の包含関係を比較するときは、右辺は無限集合でもよいが、左辺は有限集合でなければならない。

無限集合と無限集合の総当たり和および総当たり差を計算することができる。

ベクトルまたは有限集合の場合と同様に、左辺のない + は右辺の値をそのまま演算の結果とする。左辺のない は −1 倍を意味する。

演算子 の左辺と右辺の一方が有理数で、もう一方が無限集合であるとき、演算の結果は、無限集合に属するすべてのベクトルと有理数との積を集めた集合である。同様に、演算子 / の左辺が無限集合で右辺が有理数であるとき、右辺の有理数の逆数と左辺の無限集合に属するすべてのベクトルとの積を集めた集合を表す。ただし、0 で除算したときの動作は実装により異なる。これらは有限集合の場合とまったく同じである。

有限集合は無限集合の特殊な場合である。これは、2 個の無限集合に対する演算が可能であれば、1 個の無限集合と 1 個の有限集合に対する演算も可能であることを意味する。和集合、総当たり和、総当たり差がこれに該当する。

size プリミティブ演算の main 引数の値が無限集合であるとき、ブーリアン型の false を返す。また、distribute プリミティブ演算の set 引数と auxiliary set 引数には無限集合を使用できる。

文字列

コンマ記号は文字列に対しては文字列の結合を意味する。また、コンマ記号の左辺が文字列であり、右辺が他の型である場合は、右辺を文字列に変換してから結合する。

文字列と文字列の比較は演算子 =, <, ^le を使用できる。<^le は文字列を辞書式順序で比較する。

パステルステッチの文字列は UTF-8 でエンコードされている。size プリミティブ演算の main 引数が文字列であるとき、文字列のバイト数が得られる。

get character from stringmain プリミティブ演算は引数 mainat を取る。main 引数は文字列、at 引数は自然数である必要がある。この演算は、main 引数で指定された文字列の、at 引数で指定された位置にあるバイトを得る。得られるバイトは 0 以上 256 未満の自然数である。at 引数で指定された位置が文字列の範囲外である場合の動作は実装により異なる。また、at 引数を省略した場合は、文字列の先頭のバイトが得られる。

set character in stringmain プリミティブ演算は引数 main, at, in を取る。引数 main, at, in はそれぞれ自然数、自然数、文字列である必要がある。この演算は、in 引数で指定された文字列の、at 引数で指定された位置のバイトを、main 引数で指定されたバイトに置き換えた文字列を戻り値とする。at 引数で指定された位置が in 引数で指定された文字列の範囲外である場合、または、main 引数が 0 以上 256 未満の自然数でない場合の動作は実装により異なる。

get string from charactermain プリミティブ演算は、0 以上 256 未満の自然数を main 引数として、1 バイトの文字列を得る。

浮動小数点数

浮動小数点数は算術演算 +, −, ∗, / と 比較演算 =, <, ^le が可能である。+ は左辺を省略できる。

コンティニュエーション

コンティニュエーションを = 演算子で比較するとき、終端コンティニュエーションと終端コンティニュエーションとの比較はブーリアン型の true になる。また、終端コンティニュエーションと真正のコンティニュエーションとの比較はブーリアン型の false になる。真正のコンティニュエーションと真正のコンティニュエーションを比較した結果は予測できない。

カプセル

カプセルは内部状態と手続きを持つデータである。カプセルの内部状態と手続きはホスト言語で定義されていて、ゲスト言語からは引数解決の終端要因を通してのみアクセスすることができる。カプセルは参照であるので、あるカプセルの内部状態を変更すると、そのカプセルのすべてのコピーに影響する。= 演算子でカプセルを比較すると、それらのカプセルが同一の実体に対する参照である場合に限り、ブーリアン型の true が返る。

カプセルが参照している実体 1 個につき 1 個の無名ベクトルが存在する。これをカプセル識別子 (capsule identifier) という。カプセル識別子が削除されると、カプセルが参照している実体が削除される。get capsule identifiermain プリミティブ演算はカプセル型の main 引数を取り、カプセル識別子を返す。

dereferenceable capsulemain プリミティブ演算はカプセル型の main 引数を取り、その引数で指定されたカプセルが有効な実体を参照しているかどうかをブーリアン型で返す。実体が削除されたカプセルは dereferenceable capsule プリミティブ演算で調査すると偽を返す。

ホスト言語がオブジェクト指向プログラミング言語である場合、パステルステッチのカプセル型は、ホスト言語のオブジェクトをラップするために便利である。ホスト言語でのオブジェクトのメソッドの呼び出しは、カプセルを演算指定子とする統合演算式の実行に置き換えられる。このとき、ホスト言語でのメソッド名をパステルステッチの有名ベクトルに置き換え、それを統合演算式の method 引数に与える。このような method 引数の使用法をメソッドディスクリプター (method descriptor) と呼ぶ。ホスト言語のメソッドが 1 個の引数を持つとき、パステルステッチの統合演算式では main 引数に置き換える。ホスト言語のメソッドが 1 個よりも多い引数を持つとき、パステルステッチの統合演算式では、順に 1, 2, 3, ... という引数に置き換える。

型についての演算

値の型を判別するには ^type 演算子を使用する。この演算子の左辺に判別したい値を与え、右辺に「型の名前」を与えると、結果が論理型で得られる。型の名前とは、以下の有名ベクトルである。

これらの有名ベクトルの姓はすべて main である。

ベクトル、有限集合、無限集合の型の名前はすべて set である。これらを区別するには size プリミティブ演算が適している。

値を別の型に変換するには ^convert 演算子を使用する。この演算子の左辺に値を、右辺に型の名前を与える。変換に成功すればその値が得られる。変換できない組み合わせを指定した場合にはブーリアン型の false が戻り値となる。

型の変換には以下のような規則がある。

互換性についての注意 過去の言語仕様では、文字列と浮動小数点数を有理数に変換できることが規定されていた。現在の言語仕様では、これらの変換は自然数を経由する必要がある。

他の組み合わせは実装により異なる。

その他の演算

比較可能演算子は、対応する比較演算子により左辺と右辺が比較可能であるかをブーリアン型で返す。ただし、^?type 比較可能演算子は対称性のためだけに用意されており、常に true を返す。