「PIONEの式」の版間の差分
(→シーケンス) |
|||
(同じ利用者による、間の45版が非表示) | |||
行1: | 行1: | ||
− | [[PIONE]]で使用する式のメソッド一覧を型ごとに示します。pione | + | [[PIONE]]で使用する式のメソッド一覧を型ごとに示します。pione valによる実行例を記載しています。[[PIONE定義書]]の条件などで使用するときは' '内のみを使用します。引数が無いものは()を省略可能です。<br> |
<br> | <br> | ||
== 真偽型(boolean) == | == 真偽型(boolean) == | ||
+ | trueまたはfalseのいずれかの値で定義される型です。単にtrue, falseと記述するだけで自動的にこの型として取り扱われます。<br> | ||
+ | <br> | ||
+ | |||
+ | === 演算 === | ||
<pre> | <pre> | ||
− | $ pione | + | $ pione val 'true==true' |
true | true | ||
− | $ pione | + | $ pione val 'true!=true' |
false | false | ||
− | $ pione | + | $ pione val 'true and false' |
false | false | ||
− | $ pione | + | $ pione val 'true or false' |
+ | true | ||
+ | $ pione val 'true.not()' # true, falseの反転 | ||
+ | false | ||
+ | $ pione val '(true|false).every?()' # シーケンス内が全てtrueならtrue | ||
+ | false | ||
+ | $ pione val '(true|false).any?()' # シーケンス内にtrueがあればtrue | ||
+ | true | ||
+ | $ pione val '(true|false).one?()' # シーケンス内のtrueが1つだけならばtrue | ||
true | true | ||
− | $ pione | + | $ pione val '(true|false).none?()' # シーケンス内にtrueがなければtrue |
false | false | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | === 型変換 === | ||
+ | <pre> | ||
+ | $ pione val 'true.as_string()' | ||
+ | true | ||
+ | $ pione val 'true.as_integer()' | ||
+ | 1 | ||
+ | $ pione val 'true.as_float()' | ||
+ | 1.0 | ||
+ | $ pione val 'true.as_boolean()' | ||
+ | true | ||
+ | $ pione val 'true.as_data_expr()' | ||
+ | true | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | .as_string(), .as_integer(), .as_float(), .as_data_expr()はそれぞれの型に変換するメソッドですが、以下のような簡易表記があります。以降は簡易表記で記述します。<br> | ||
+ | <pre> | ||
+ | $ pione val 'true.str()' | ||
+ | true | ||
+ | $ pione val 'true.i()' | ||
+ | 1 | ||
+ | $ pione val 'true.f()' | ||
+ | 1.0 | ||
+ | $ pione val 'true.d()' | ||
+ | true | ||
</pre> | </pre> | ||
<br> | <br> | ||
== 文字列型(string) == | == 文字列型(string) == | ||
+ | 文字列用の型です。" "(ダブルクォート)で囲んだ部分をこの型として取り扱います。<br> | ||
+ | <br> | ||
+ | |||
+ | === 演算 === | ||
<pre> | <pre> | ||
− | $ pione | + | $ pione val '"abc"=="def"' |
false | false | ||
− | $ pione | + | $ pione val '"abc"!="def"' |
true | true | ||
− | $ pione | + | $ pione val '"abc"+"def"' #文字列の結合 |
abcdef | abcdef | ||
− | $ pione-val '"abc". | + | $ pione val '"abc".count()' #文字列の長さ |
− | + | 3 | |
+ | $ pione val '"abc".include?("ab")' #引数の文字列を含んでいる場合はtrue | ||
+ | true | ||
+ | $ pione val '"abc".include?("ac")' | ||
+ | false | ||
+ | $ pione val '"abcdefg".substring(2,3)' #開始位置と文字数を引数として指定し文字列を取り出す | ||
+ | bcd | ||
+ | $ pione val '"abc".insert(2,"def")' #位置と文字列を引数として指定し文字列挿入を行う | ||
+ | adefbc | ||
+ | $ pione val '("abc"|"def"|"ghi").join("---")' #文字列型のシーケンスを引数で指定した文字列で結合 | ||
+ | abc---def---ghi | ||
+ | $ pione val '("abc"|"def"|"ghi").join()' #引数無しの場合は空白で結合 | ||
+ | abc def ghi | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | === 型変換 === | ||
+ | <pre> | ||
+ | $ pione val '"abc".str()' | ||
+ | abc | ||
+ | $ pione val '"12.3".i()' | ||
+ | 12 | ||
+ | $ pione val '"12.3".f()' | ||
+ | 12.3 | ||
+ | $ pione val '"abc".d()' | ||
+ | abc | ||
</pre> | </pre> | ||
<br> | <br> | ||
== 整数型(integer) == | == 整数型(integer) == | ||
+ | 12, 0, -3などの整数用の型です。小数点を付けていない数字はこの型として取り扱います。浮動小数型と演算する場合は、型変換してから使用します。<br> | ||
+ | <br> | ||
+ | |||
+ | === 演算 === | ||
<pre> | <pre> | ||
− | $ pione | + | $ pione val '1==2' |
false | false | ||
− | $ pione | + | $ pione val '1!=2' |
true | true | ||
− | $ pione | + | $ pione val '1>2' |
false | false | ||
− | $ pione | + | $ pione val '1>=2' |
false | false | ||
− | $ pione | + | $ pione val '1<2' |
+ | true | ||
+ | $ pione val '1<=2' | ||
+ | true | ||
+ | $ pione val '1+2' #加算 | ||
3 | 3 | ||
− | $ pione | + | $ pione val '1-2' #減算 |
-1 | -1 | ||
− | $ pione | + | $ pione val '1*2' #乗算 |
2 | 2 | ||
− | $ pione | + | $ pione val '11%2' #剰余 |
1 | 1 | ||
− | $ pione | + | $ pione val '1/2' #除算(商) |
0 | 0 | ||
− | $ pione | + | $ pione val '1.next()' #+1の整数 |
2 | 2 | ||
− | $ pione | + | $ pione val '1.prev()' #-1の整数 |
0 | 0 | ||
− | $ pione | + | $ pione val '1.even?()' #偶数ならばtrue |
false | false | ||
− | $ pione | + | $ pione val '1.odd?()' #奇数ならばtrue |
true | true | ||
− | $ pione-val '1. | + | $ pione val '1.upto(10)' #引数までの整数を得る(+1刻み) |
− | 1.0 | + | 1 2 3 4 5 6 7 8 9 10 |
+ | $ pione val '20.downto(11)' #引数までの整数を得る(-1刻み) | ||
+ | 20 19 18 17 16 15 14 13 12 11 | ||
+ | $ pione val '(1|2|3).max()' #最大値 | ||
+ | 3 | ||
+ | $ pione val '(1|2|3).min()' #最小値 | ||
+ | 1 | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | === 型変換 === | ||
+ | <pre> | ||
+ | $ pione val '123.str()' | ||
+ | 123 | ||
+ | $ pione val '123.i()' | ||
+ | 123 | ||
+ | $ pione val '123.f()' | ||
+ | 123.0 | ||
</pre> | </pre> | ||
<br> | <br> | ||
== 浮動小数点型(float) == | == 浮動小数点型(float) == | ||
− | + | 4.5, 0.67, -89.1などの有理数用の型です。小数点を含む数字の場合はこの型として取り扱います。整数型と演算する場合は、型変換してから使用します。<br> | |
+ | <br> | ||
+ | |||
+ | === 演算 === | ||
<pre> | <pre> | ||
− | $ pione-val '1.0/ | + | $ pione val '1.0==1.00' |
− | 0. | + | true |
+ | $ pione val '10.0!=1.00' | ||
+ | true | ||
+ | $ pione val '1.0>1.00' | ||
+ | false | ||
+ | $ pione val '1.0>=1.00' | ||
+ | true | ||
+ | $ pione val '1.00<10.0' | ||
+ | true | ||
+ | $ pione val '1.00<=10.0' | ||
+ | true | ||
+ | $ pione val '1.01+10.0' #加算 | ||
+ | 11.01 | ||
+ | $ pione val '1.01-10.0' #減算 | ||
+ | -8.99 | ||
+ | $ pione val '1.01*10.0' #乗算 | ||
+ | 10.1 | ||
+ | $ pione val '1.01/10.0' #除算 | ||
+ | 0.101 | ||
+ | $ pione val '101.0%10.0' #剰余 | ||
+ | 1.0 | ||
+ | $ pione val '1.0.sin()' #sin(ラジアン) | ||
+ | 0.8414709848078965 | ||
+ | $ pione val '1.0.cos()' #cos(ラジアン) | ||
+ | 0.5403023058681398 | ||
+ | $ pione val '(-1.0).abs()' #絶対値 | ||
+ | 1.0 | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | === 型変換 === | ||
+ | <pre> | ||
+ | $ pione val '12.3.str()' | ||
+ | 12.3 | ||
+ | $ pione val '12.3.i()' | ||
+ | 12 | ||
+ | $ pione val '12.3.f()' | ||
+ | 12.3 | ||
</pre> | </pre> | ||
<br> | <br> | ||
− | 整数型の演算を浮動小数点型で出力したいときには予め. | + | 整数型の演算を浮動小数点型で出力したいときには予め.f()または.as_float()で型変換を行います。<br> |
<pre> | <pre> | ||
− | $ pione | + | $ pione val '1.01/10' |
fatal: PIONE method "/" is not found: #<Type integer>. #<Type float> [/pione/lib/pione/command/basic-command.rb:48:in `abort'] (2014-12-08T11:51:11.481+09:00, #8995) | fatal: PIONE method "/" is not found: #<Type integer>. #<Type float> [/pione/lib/pione/command/basic-command.rb:48:in `abort'] (2014-12-08T11:51:11.481+09:00, #8995) | ||
− | $ pione | + | $ pione val '1.01/10.f()' |
− | 0. | + | 0.101 |
</pre> | </pre> | ||
<br> | <br> | ||
== ルール表現型 == | == ルール表現型 == | ||
+ | [[PIONE定義書]]などで記述した処理を定義するためのルール用の型です。<br> | ||
+ | <br> | ||
+ | |||
+ | <table border=1> | ||
+ | <tr> | ||
+ | <th>メソッド</th> | ||
+ | <th>説明</th> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>param</td> | ||
+ | <td>引数にパラメータを設定する</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>as_string</td> | ||
+ | <td>文字列表現に変換する</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>input_tickets</td> | ||
+ | <td>入力チケット条件を得る</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>output_tickets</td> | ||
+ | <td>出力チケット条件を得る</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>==></td> | ||
+ | <td>(ルール)==>(チケット)のように使用し、ルール実行後にチケットを発行する</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>>>></td> | ||
+ | <td>(ルール1)>>>(ルール2)のように使用し、ルール1実行後にルール2を実行する</td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | <br> | ||
+ | |||
+ | == パッケージ型 == | ||
+ | <table border=1> | ||
+ | <tr> | ||
+ | <th>メソッド</th> | ||
+ | <th>説明</th> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>editor</td> | ||
+ | <td>引数で指定した文字列を編集者名に設定</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>tag</td> | ||
+ | <td>引数で指定した文字列をタグに設定</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>param</td> | ||
+ | <td>パッケージパラメータを引数として設定(引数無しの場合はパラメータを得るのみ)</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>rule</td> | ||
+ | <td>引数に指定したルールを得る</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>Parent</td> | ||
+ | <td>親パッケージと解釈するアノテーションを設定</td> | ||
+ | </tr> | ||
+ | </table> | ||
<br> | <br> | ||
== データ表現型 == | == データ表現型 == | ||
+ | 入力ファイルや出力ファイルなどのための型です。' '(シングルクォート)で囲まれた部分はこの型として取り扱います。<br> | ||
+ | <br> | ||
+ | |||
+ | <table border=1> | ||
+ | <tr> | ||
+ | <th>メソッド</th> | ||
+ | <th>説明</th> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>file</td> | ||
+ | <td>all解釈に設定</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>file?</td> | ||
+ | <td>all解釈の場合はtrue、そうでない場合はfalse</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>stdout</td> | ||
+ | <td>標準出力モードに設定</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>stdout?</td> | ||
+ | <td>標準出力モードの場合はtrue、そうでない場合はfalse</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>stderr</td> | ||
+ | <td>標準エラーモードに設定</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>stderr?</td> | ||
+ | <td>標準エラーモードの場合はtrue、そうでない場合はfalse</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>neglect</td> | ||
+ | <td>時間比較無効に設定</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>neglect?</td> | ||
+ | <td>時間比較無効の場合はtrue、そうでない場合はfalse</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>care</td> | ||
+ | <td>時間比較有効に設定</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>care?</td> | ||
+ | <td>時間比較有効の場合はtrue、そうでない場合はfalse</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>write</td> | ||
+ | <td>write操作に設定(通常に宣言した出力ファイルはwrite操作に設定されている)</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>write?</td> | ||
+ | <td>write操作の場合はtrue、そうでない場合はfalse</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>remove</td> | ||
+ | <td>remove操作に設定</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>remove?</td> | ||
+ | <td>remove操作の場合はtrue、そうでない場合はfalse</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>touch</td> | ||
+ | <td>touch操作に設定</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>touch?</td> | ||
+ | <td>touch操作の場合はtrue、そうでない場合はfalse</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>except</td> | ||
+ | <td>データ表現に対しての例外を引数で設定する。</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>exceptions</td> | ||
+ | <td>設定されている例外を全て得る</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>or</td> | ||
+ | <td>シーケンスのメソッド|の効果と同じ</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>match</td> | ||
+ | <td>引数で指定した文字列とマッチした文字列を得る</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>match</td> | ||
+ | <td>引数で指定した文字列とマッチした場合はtrue、そうでない場合はfalse</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>as_string</td> | ||
+ | <td>文字列に変換する</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>accept_nonexistance?</td> | ||
+ | <td>データが存在しないことを許容する場合はtrue、そうでない場合はfalse</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>suffix</td> | ||
+ | <td>拡張子を引数で指定したデータ表現または文字列に変更する</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>join</td> | ||
+ | <td>データ表現を引数指定した文字列で連結した文字列を出力(引数が無い場合は空白で連結)</td> | ||
+ | </tr> | ||
+ | <table> | ||
+ | <br> | ||
+ | |||
+ | == 特性(Feature) == | ||
+ | <table border=1> | ||
+ | <tr> | ||
+ | <th>メソッド</th> | ||
+ | <th>説明</th> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>&</td> | ||
+ | <td>特性の結合</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>match</td> | ||
+ | <td>引数で指定した提供式にて応答判断が真の場合はtrue、そうでない場合はfalse</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>as_string</td> | ||
+ | <td>文字列に変換</td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | <br> | ||
+ | |||
+ | == チケット表現 == | ||
+ | <table border=1> | ||
+ | <tr> | ||
+ | <th>メソッド</th> | ||
+ | <th>説明</th> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>==></td> | ||
+ | <td>(チケット)==>(ルール)のように使用し、チケット発行後にルールを実行する</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>as_string</td> | ||
+ | <td>文字列に変換</td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | <br> | ||
+ | |||
+ | == パラメータセット == | ||
+ | <table border=1> | ||
+ | <tr> | ||
+ | <th>メソッド</th> | ||
+ | <th>説明</th> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>+</td> | ||
+ | <td>パラメータセットの合成</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>as_string</td> | ||
+ | <td>文字列に変換</td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | <br> | ||
+ | |||
+ | == シーケンス == | ||
+ | シーケンスとはデータの組み合わせであって、配列のように取り扱う[[#序数シーケンス]]と、キーと値を対応して取り扱う[[#キー付きシーケンス]]があります。各要素は同じ型であれば、真偽値、文字列型、整数型、浮動小数点型などが使用可能で、[[#序数付きシーケンス]]ではさらにデータ表現型も取り扱うことができます。<br> | ||
+ | <br> | ||
+ | |||
+ | === 演算 === | ||
+ | <pre> | ||
+ | $ pione val '((3|5)|7)' #シーケンスの結合 | ||
+ | 3 5 7 | ||
+ | $ pione val '(3|5|7)==((3|5)|7)' | ||
+ | true | ||
+ | $ pione val '(3|5|7)!=((3|5)|7)' | ||
+ | false | ||
+ | $ pione val '(3|5|7).length()' #要素数を得る | ||
+ | 3 | ||
+ | $ pione val '(3|5|7).empty?()' #要素が空ならばtrue | ||
+ | false | ||
+ | $ pione val '(3|5|7).textize()' #要素を文字列型で書き並べる | ||
+ | 3 5 7 | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | === 型・属性 === | ||
+ | <pre> | ||
+ | $ pione val '(3|5|7).each()' #eachを設定 | ||
+ | 3 5 7 | ||
+ | $ pione val '(3|5|7).all()' #allを設定 | ||
+ | 3 5 7 | ||
+ | $ pione val '(3|5|7).each?()' #eachならばtrue | ||
+ | true | ||
+ | $ pione val '(3|5|7).all?()' #allならばtrue | ||
+ | false | ||
+ | $ pione val '(3|5|7).all().all?()' | ||
+ | true | ||
+ | $ pione val '(3|5|7).type()' #各要素の型を得る | ||
+ | integer | ||
+ | $ pione val '(3.0|5.0|7.0).i()' #各要素を整数型に変換 | ||
+ | 3 5 7 | ||
+ | $ pione val '(3|5|7).f()' #各要素を浮動小数点型に変換 | ||
+ | 3.0 5.0 7.0 | ||
+ | $ pione val '(3|5|7).str()' #各要素を文字列型に変換 | ||
+ | 3 5 7 | ||
+ | $ pione val '(3|5|7).str().type()' | ||
+ | string | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | === 序数付きシーケンス === | ||
+ | <pre> | ||
+ | $ pione val '(3|5|7).nth(2)' #指定した番号の要素を得る | ||
+ | 5 | ||
+ | $ pione val '(3|5|7)[2]' #指定した番号の要素を得る | ||
+ | 5 | ||
+ | $ pione val '(3|5|7).member?(3)' #要素に引数で指定した値があればtrue | ||
+ | true | ||
+ | $ pione val '(3|5|7).reverse()' #要素の順番を逆にする | ||
+ | 7 5 3 | ||
+ | $ pione val '(3|5|7).head()' #先頭の要素を得る | ||
+ | 3 | ||
+ | $ pione val '(3|5|7).tail()' #先頭以外の要素を得る | ||
+ | 5 7 | ||
+ | $ pione val '(3|5|7).last()' #末尾の要素を得る | ||
+ | 7 | ||
+ | $ pione val '(3|5|7).init()' #末尾以外の要素を得る | ||
+ | 3 5 | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | === キー付きシーケンス === | ||
+ | <pre> | ||
+ | $ pione val '(("key1":"A")|("key2":"B")).keys()' #全てのキーを得る | ||
+ | key1 key2 | ||
+ | $ pione val '(("key1":"A")|("key2":"B")).values()' #全ての値を得る | ||
+ | A B | ||
+ | $ pione val '(("key1":"A")|("key2":"B"))["key1"]' #キーに対応した値を得る | ||
+ | A | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | == メソッドにおける注意事項 == | ||
+ | === 四則演算における注意事項 === | ||
+ | 現バージョンでの[[PIONE]]における四則演算は二項演算のみに対応しています。三項以上の場合は必ず括弧を使用して二項ずつにします。<br> | ||
+ | <pre> | ||
+ | $ pione val '((5+3)*(4/2))-1' | ||
+ | 15 | ||
+ | $ pione val '1.0+((2.0-3.0)*(4.0/5.0))' | ||
+ | 0.19999999999999996 | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | [[PIONE定義書]]に記述するとき<br> | ||
+ | <pre> | ||
+ | if ($i * $j) + $k < $max | ||
+ | </pre> | ||
<br> | <br> |
2015年3月30日 (月) 02:44時点における最新版
PIONEで使用する式のメソッド一覧を型ごとに示します。pione valによる実行例を記載しています。PIONE定義書の条件などで使用するときは' '内のみを使用します。引数が無いものは()を省略可能です。
目次
真偽型(boolean)
trueまたはfalseのいずれかの値で定義される型です。単にtrue, falseと記述するだけで自動的にこの型として取り扱われます。
演算
$ pione val 'true==true' true $ pione val 'true!=true' false $ pione val 'true and false' false $ pione val 'true or false' true $ pione val 'true.not()' # true, falseの反転 false $ pione val '(true|false).every?()' # シーケンス内が全てtrueならtrue false $ pione val '(true|false).any?()' # シーケンス内にtrueがあればtrue true $ pione val '(true|false).one?()' # シーケンス内のtrueが1つだけならばtrue true $ pione val '(true|false).none?()' # シーケンス内にtrueがなければtrue false
型変換
$ pione val 'true.as_string()' true $ pione val 'true.as_integer()' 1 $ pione val 'true.as_float()' 1.0 $ pione val 'true.as_boolean()' true $ pione val 'true.as_data_expr()' true
.as_string(), .as_integer(), .as_float(), .as_data_expr()はそれぞれの型に変換するメソッドですが、以下のような簡易表記があります。以降は簡易表記で記述します。
$ pione val 'true.str()' true $ pione val 'true.i()' 1 $ pione val 'true.f()' 1.0 $ pione val 'true.d()' true
文字列型(string)
文字列用の型です。" "(ダブルクォート)で囲んだ部分をこの型として取り扱います。
演算
$ pione val '"abc"=="def"' false $ pione val '"abc"!="def"' true $ pione val '"abc"+"def"' #文字列の結合 abcdef $ pione val '"abc".count()' #文字列の長さ 3 $ pione val '"abc".include?("ab")' #引数の文字列を含んでいる場合はtrue true $ pione val '"abc".include?("ac")' false $ pione val '"abcdefg".substring(2,3)' #開始位置と文字数を引数として指定し文字列を取り出す bcd $ pione val '"abc".insert(2,"def")' #位置と文字列を引数として指定し文字列挿入を行う adefbc $ pione val '("abc"|"def"|"ghi").join("---")' #文字列型のシーケンスを引数で指定した文字列で結合 abc---def---ghi $ pione val '("abc"|"def"|"ghi").join()' #引数無しの場合は空白で結合 abc def ghi
型変換
$ pione val '"abc".str()' abc $ pione val '"12.3".i()' 12 $ pione val '"12.3".f()' 12.3 $ pione val '"abc".d()' abc
整数型(integer)
12, 0, -3などの整数用の型です。小数点を付けていない数字はこの型として取り扱います。浮動小数型と演算する場合は、型変換してから使用します。
演算
$ pione val '1==2' false $ pione val '1!=2' true $ pione val '1>2' false $ pione val '1>=2' false $ pione val '1<2' true $ pione val '1<=2' true $ pione val '1+2' #加算 3 $ pione val '1-2' #減算 -1 $ pione val '1*2' #乗算 2 $ pione val '11%2' #剰余 1 $ pione val '1/2' #除算(商) 0 $ pione val '1.next()' #+1の整数 2 $ pione val '1.prev()' #-1の整数 0 $ pione val '1.even?()' #偶数ならばtrue false $ pione val '1.odd?()' #奇数ならばtrue true $ pione val '1.upto(10)' #引数までの整数を得る(+1刻み) 1 2 3 4 5 6 7 8 9 10 $ pione val '20.downto(11)' #引数までの整数を得る(-1刻み) 20 19 18 17 16 15 14 13 12 11 $ pione val '(1|2|3).max()' #最大値 3 $ pione val '(1|2|3).min()' #最小値 1
型変換
$ pione val '123.str()' 123 $ pione val '123.i()' 123 $ pione val '123.f()' 123.0
浮動小数点型(float)
4.5, 0.67, -89.1などの有理数用の型です。小数点を含む数字の場合はこの型として取り扱います。整数型と演算する場合は、型変換してから使用します。
演算
$ pione val '1.0==1.00' true $ pione val '10.0!=1.00' true $ pione val '1.0>1.00' false $ pione val '1.0>=1.00' true $ pione val '1.00<10.0' true $ pione val '1.00<=10.0' true $ pione val '1.01+10.0' #加算 11.01 $ pione val '1.01-10.0' #減算 -8.99 $ pione val '1.01*10.0' #乗算 10.1 $ pione val '1.01/10.0' #除算 0.101 $ pione val '101.0%10.0' #剰余 1.0 $ pione val '1.0.sin()' #sin(ラジアン) 0.8414709848078965 $ pione val '1.0.cos()' #cos(ラジアン) 0.5403023058681398 $ pione val '(-1.0).abs()' #絶対値 1.0
型変換
$ pione val '12.3.str()' 12.3 $ pione val '12.3.i()' 12 $ pione val '12.3.f()' 12.3
整数型の演算を浮動小数点型で出力したいときには予め.f()または.as_float()で型変換を行います。
$ pione val '1.01/10' fatal: PIONE method "/" is not found: #<Type integer>. #<Type float> [/pione/lib/pione/command/basic-command.rb:48:in `abort'] (2014-12-08T11:51:11.481+09:00, #8995) $ pione val '1.01/10.f()' 0.101
ルール表現型
PIONE定義書などで記述した処理を定義するためのルール用の型です。
メソッド | 説明 |
---|---|
param | 引数にパラメータを設定する |
as_string | 文字列表現に変換する |
input_tickets | 入力チケット条件を得る |
output_tickets | 出力チケット条件を得る |
==> | (ルール)==>(チケット)のように使用し、ルール実行後にチケットを発行する |
>>> | (ルール1)>>>(ルール2)のように使用し、ルール1実行後にルール2を実行する |
パッケージ型
メソッド | 説明 |
---|---|
editor | 引数で指定した文字列を編集者名に設定 |
tag | 引数で指定した文字列をタグに設定 |
param | パッケージパラメータを引数として設定(引数無しの場合はパラメータを得るのみ) |
rule | 引数に指定したルールを得る |
Parent | 親パッケージと解釈するアノテーションを設定 |
データ表現型
入力ファイルや出力ファイルなどのための型です。' '(シングルクォート)で囲まれた部分はこの型として取り扱います。
メソッド | 説明 |
---|---|
file | all解釈に設定 |
file? | all解釈の場合はtrue、そうでない場合はfalse |
stdout | 標準出力モードに設定 |
stdout? | 標準出力モードの場合はtrue、そうでない場合はfalse |
stderr | 標準エラーモードに設定 |
stderr? | 標準エラーモードの場合はtrue、そうでない場合はfalse |
neglect | 時間比較無効に設定 |
neglect? | 時間比較無効の場合はtrue、そうでない場合はfalse |
care | 時間比較有効に設定 |
care? | 時間比較有効の場合はtrue、そうでない場合はfalse |
write | write操作に設定(通常に宣言した出力ファイルはwrite操作に設定されている) |
write? | write操作の場合はtrue、そうでない場合はfalse |
remove | remove操作に設定 |
remove? | remove操作の場合はtrue、そうでない場合はfalse |
touch | touch操作に設定 |
touch? | touch操作の場合はtrue、そうでない場合はfalse |
except | データ表現に対しての例外を引数で設定する。 |
exceptions | 設定されている例外を全て得る |
or | シーケンスのメソッド|の効果と同じ |
match | 引数で指定した文字列とマッチした文字列を得る |
match | 引数で指定した文字列とマッチした場合はtrue、そうでない場合はfalse |
as_string | 文字列に変換する |
accept_nonexistance? | データが存在しないことを許容する場合はtrue、そうでない場合はfalse |
suffix | 拡張子を引数で指定したデータ表現または文字列に変更する |
join | データ表現を引数指定した文字列で連結した文字列を出力(引数が無い場合は空白で連結) |
メソッド | 説明 |
---|---|
& | 特性の結合 |
match | 引数で指定した提供式にて応答判断が真の場合はtrue、そうでない場合はfalse |
as_string | 文字列に変換 |
チケット表現
メソッド | 説明 |
---|---|
==> | (チケット)==>(ルール)のように使用し、チケット発行後にルールを実行する |
as_string | 文字列に変換 |
パラメータセット
メソッド | 説明 |
---|---|
+ | パラメータセットの合成 |
as_string | 文字列に変換 |
シーケンス
シーケンスとはデータの組み合わせであって、配列のように取り扱う#序数シーケンスと、キーと値を対応して取り扱う#キー付きシーケンスがあります。各要素は同じ型であれば、真偽値、文字列型、整数型、浮動小数点型などが使用可能で、#序数付きシーケンスではさらにデータ表現型も取り扱うことができます。
演算
$ pione val '((3|5)|7)' #シーケンスの結合 3 5 7 $ pione val '(3|5|7)==((3|5)|7)' true $ pione val '(3|5|7)!=((3|5)|7)' false $ pione val '(3|5|7).length()' #要素数を得る 3 $ pione val '(3|5|7).empty?()' #要素が空ならばtrue false $ pione val '(3|5|7).textize()' #要素を文字列型で書き並べる 3 5 7
型・属性
$ pione val '(3|5|7).each()' #eachを設定 3 5 7 $ pione val '(3|5|7).all()' #allを設定 3 5 7 $ pione val '(3|5|7).each?()' #eachならばtrue true $ pione val '(3|5|7).all?()' #allならばtrue false $ pione val '(3|5|7).all().all?()' true $ pione val '(3|5|7).type()' #各要素の型を得る integer $ pione val '(3.0|5.0|7.0).i()' #各要素を整数型に変換 3 5 7 $ pione val '(3|5|7).f()' #各要素を浮動小数点型に変換 3.0 5.0 7.0 $ pione val '(3|5|7).str()' #各要素を文字列型に変換 3 5 7 $ pione val '(3|5|7).str().type()' string
序数付きシーケンス
$ pione val '(3|5|7).nth(2)' #指定した番号の要素を得る 5 $ pione val '(3|5|7)[2]' #指定した番号の要素を得る 5 $ pione val '(3|5|7).member?(3)' #要素に引数で指定した値があればtrue true $ pione val '(3|5|7).reverse()' #要素の順番を逆にする 7 5 3 $ pione val '(3|5|7).head()' #先頭の要素を得る 3 $ pione val '(3|5|7).tail()' #先頭以外の要素を得る 5 7 $ pione val '(3|5|7).last()' #末尾の要素を得る 7 $ pione val '(3|5|7).init()' #末尾以外の要素を得る 3 5
キー付きシーケンス
$ pione val '(("key1":"A")|("key2":"B")).keys()' #全てのキーを得る key1 key2 $ pione val '(("key1":"A")|("key2":"B")).values()' #全ての値を得る A B $ pione val '(("key1":"A")|("key2":"B"))["key1"]' #キーに対応した値を得る A
メソッドにおける注意事項
四則演算における注意事項
現バージョンでのPIONEにおける四則演算は二項演算のみに対応しています。三項以上の場合は必ず括弧を使用して二項ずつにします。
$ pione val '((5+3)*(4/2))-1' 15 $ pione val '1.0+((2.0-3.0)*(4.0/5.0))' 0.19999999999999996
PIONE定義書に記述するとき
if ($i * $j) + $k < $max