「PIONEの式」の版間の差分

提供: Eospedia
移動: 案内検索
(ルール表現型)
(データ表現型)
行254: 行254:
 
<br>
 
<br>
  
<pre>
+
<table border=1>
 
+
<tr>
</pre>
+
<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>
 
<br>
  

2015年3月11日 (水) 07:33時点における版

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を実行する


データ表現型

入力ファイルや出力ファイルなどのための型です。' '(シングルクォート)で囲まれた部分はこの型として取り扱います。

メソッド 説明
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 データ表現を引数指定した文字列で連結した文字列を出力(引数が無い場合は空白で連結)

シーケンス

シーケンスとはデータの組み合わせであって、配列のように取り扱う#序数シーケンスと、キーと値を対応して取り扱う#キー付きシーケンスがあります。各要素は同じ型であれば、真偽値、文字列型、整数型、浮動小数点型などが使用可能で、#序数付きシーケンスではさらにデータ表現型も取り扱うことができます。

演算

$ 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