「PIONEの式」の版間の差分

提供: Eospedia
移動: 案内検索
(ルール表現型)
(ルール表現型)
行218: 行218:
 
<br>
 
<br>
  
pione valには対応していないので、式の定義のみ示します。<br>
 
 
<table border=1>
 
<table border=1>
 
<tr>
 
<tr>

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

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


データ表現型

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



シーケンス

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

演算

$ 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