all name
これは、name という名前のメタクラスの すべてのインスタンスを返します。例えば、all "Class" は、メタクラス Class のすべてのインスタンスを返します。
alternation (str, alt) ≡ str |=> alt ≡ if str <> "" then str else alt
str が空ストリングでない場合は str が返されます。それ以外の場合は alt が返されます。
alternation ("abc", "def") ⇒ abc
alternation ("", "def") ⇒ def
attribute : string x object → string
$ : string x object → string
attribute (name, obj)
これは、obj に属する name という名前の属性の値を返します。obj のメタクラスに name という属性がない場合は、実行エラーが通知されます。 $ の最初のパラメーターは二重引用符で囲みませんが、attribute の最初のパラメーターは二重引用符で囲みます。
この関数は常に属性の値を文字列として返します。 一方、メタモデル内の属性は、それ以外の型 (整数、実数、ブール、および各種列挙型) にすることができます。 しかし、attribute は常に文字列を返します。これは、object 型がすべての メタクラスのインスタンスを含むことを考えると、この前提立てが最も安全であるためです。要するに、object 型は、 メタモデルについては型のないものになります。文字列値が常に返されますが、情報は失われません。 返された文字列は、変換演算子のいずれかを使用して、常に適切な型に変換できます。 列挙型の属性についてのみ例外があります。 列挙型は、値が列挙型を構成する列挙子のテキスト名になり、文字列のように処理されます。
attribute ("name", aClass) ≡ $name of aClass ⇒ Tree
attribute ("type", anOperation) ⇒ std::string
$name ≡ $name of current ⇒ Leaf
boolean $isAbstract of aClass ⇒ true
attribute (name, ocoll) ≡ $name′ of ocoll ≡ comma map {$name} over ocoll
これは、ocoll 内の各 オブジェクトに属する name という名前の属性の値から形成された文字列を返します (値はコンマで区切られます)。 ocoll にオブジェクトが含まれない場合は、空ストリングが返されます。 ocoll に obj というオブジェクトが 1 つのみ含まれる場合、attribute(name, ocoll) は attribute (name, obj) と同等です。 ocoll 内のあるオブジェクトのメタクラスに name という名前の属性がない場合は、実行エラーが生成されます。
attribute ("name", all "Class") ⇒ Tree, Branch, Leaf
attribute ("type", all "Operation") ⇒ grow
$name of all "Class" ⇒ Tree, Branch, Leaf
find (re, s)
これは、正規表現 re と一致する s の最初のサブストリングを返します。 re と一致する s のサブストリングがない場合は、空ストリングが返されます (λ)。 サブストリングと突き合わせる場合、最大文字数での突き合わせが行われます。
find ('[01]+', "---010111--111") ⇒ 010111
find ('[a-z]+', "--010111") ⇒ λ
first ocoll
これは、ocoll 内の最初のオブジェクトを返します。 ocoll が空の場合は、実行エラーが表示されます。
$name of first all "Class" ⇒ Node
match (re, s) ≡ s ~= re′
これは、正規表現 re と一致する s のサブストリングがある場合、かつ、その場合に限り、true を返します。
match ('[01]+', "abc010111def") ⇒ true
match ('^[01]+$', "abc010111def") ⇒ false
match ('[01]*', "abc") ⇒ true
この最後の例で、一致しないように思われますがこれは true になります。 閉包 * は空ストリングを受け入れるため、また、空ストリングは "abc" の 有効なサブストリングであるため、この突き合わせは成功します。
only ocoll
これは、ocoll 内の最初 (および唯一) のオブジェクトを返します。ocoll が空か、あるいは複数のオブジェクトを保持する場合は、実行エラーが通知されます。
$name of only all "Class" ⇒ Node
replace (re, s, r)
これは、re と 一致する最初のサブストリングの s を r に置換した文字列を返します。re と一致する s のサブストリングがない場合は、s を返します。 サブストリングと突き合わせる場合、最大文字数での突き合わせが行われます。
replace ('[01]+', "---010111--111", "A") ⇒ ---A--111
replace ('[a-z]+', "010111", "A") ⇒ 010111
replace_all (re, s, r)
これは、re と 一致するすべてのサブストリングの s に相当する文字列を r に置換して返します。re と一致する s のサブストリングがない場合は、s を返します。 サブストリングと突き合わせる場合、最大文字数での突き合わせが行われます。
replace_all ('[01]+', "---010111--111", "A") ⇒ ---A--A
replace_all ('[a-z]+', "010111", "A") ⇒ 010111
次は、replace_all キーワードと "%s" の使用例について示します。
replace_all コマンドは、段落形式の 項目がコンマで区切られた段落形式のリストを列形式のリストに再フォーマット設定する際にも役立ちます。 コマンドを以下のように使用することで、コンマをスペースに変更し、新しい行 (¥n) を挿入してリストを作成します。
replace_all (',',comma map {$name + "¥n") over
([containedElements]{$metaClass="[metaclass name]"})," ")
reverse ocoll
これは、複数要素のコレクション ocoll を 逆順にして返します。
$name of (all "Class") ⇒ "Class_0, Class_1, Class_2" $name of (reverse all "Class") ⇒ "Class_2, Class_1, Class_0"
trim s ≡ replace ('^[ ¥t¥f¥r¥n]+', replace ('[ ¥t¥f¥r¥n]+$', s, ""),
"")
文字列 s から先行および後続スペース、タブ、用紙送り、復帰、および改行をすべて削除したものを返します。
trim " ¥tabc¥n" ⇒ abc
uid obj
これは、obj に固有の ID を返します。 1 つのモデルに 2 つのオブジェクトがある場合、同じ ID を保持することはできません。ただし、2 つのオブジェクトが 2 つの異なるモデルに存在する場合は、同じ ID を 保持することができます。また、その 1 つのオブジェクトは別のセッションごとにそれぞれ別の ID を保持することができます。 ID 文字列の構造はないため、実際のフォーマットは今後変更される可能性があります。
uid anObject ⇒ 04240120
unique ocoll
これは、重複オブジェクトが除去されたコレクション ocoll を返します。固有性は、オブジェクトの ID に基づきます。このとき、ocoll 内の固有のオブジェクトの相対的な順序は保持されません。