Loading
式
ADPでは式をサポートしています。
演算子一覧
ADPでサポートしている演算子の一覧です。
| 演算子 | 説明 |
| + | 加算 |
| - | 減算 単項(マイナス) |
| * | 乗算 |
| / | 除算 |
| % | 剰余 |
| < | 比較(小なり、未満) |
| <= | 比較(小なりイコール、以下) |
| > | 比較(大なり、より大きい) |
| >= | 比較(大なりイコール、以上) |
| == | 比較(イコール) |
| != | 比較(ノットイコール) |
| <> | 比較(ノットイコール) |
| ~ | ビットNOT |
| & | ビットAND |
| ^ | ビットXOR |
| | | ビットOR |
| = | 代入 単項(述語の値) |
| += | 代入(加算後代入) |
| -= | 代入(減算後代入) |
| *= | 代入(乗算後代入) |
| /= | 代入(除算後代入) |
| %= | 代入(剰余後代入) |
| &= | 代入(AND後代入) |
| ^= | 代入(XOR後代入) |
| |= | 代入(OR後代入) |
| . | メソッド呼び出し |
| [] | 配列(連想配列)アクセス |
| {} | 連想配列アクセス |
| : | 連想配列アクセス |
演算子の優先順位
以下、演算子の優先順位です。
| 演算子 | 優先順位 |
| [] {} : . | 1 |
| -(単項) ~ =(単項) | 2 |
| * / % | 3 |
| + - | 4 |
| < <= > >= == != <> | 5 |
| & | 6 |
| ^ | 7 |
| | | 8 |
| = += -= *= /= %= &= ^= |= | 9 |
優先順位の欄にある数値が小さい方が優先順位が高いです。
比較演算子は、代入演算子より優先順位が高いですが、結果がfalseとなる場合バックトラックを行いますので、比較結果を代入することはできません(Ver0.5以降)。
※Ver0.81では[],{},:は.よりも優先順位が高いです。Ver0.82移行は同一の優先順位になります。
四則演算
ADPは、四則演算に対応しています。以下四則演算の例です。
多くのプログラミング言語と同様に'*'(乗算)や'/'(除算)は'+'(加算)より優先順位が高いので先に計算されます。また括弧もサポートしています。
・コード(expression2.p)
,printn( 10 + 20 * 4 / 5); # 26
,printn( (10 + 20) % 7 + 1); # 3
・実行結果
D:\sample>adp expression2.p
26
3
代入
ADPは、'='代入もサポートしています。ADPでは'='代入はPrologと異なり、通常のプログラミング言語と同様の動きをするように実装しています。
・コード(let1.p)
,$a = 10, $b = 20, $c = $a * $b, printn($c);
・実行結果
D:\sample>adp let1.p
200
比較
ADPでは、比較演算子もサポートしています。比較の結果がFalseの場合、バックトラックが発生します。比較の結果がTrueの場合、そのまま次の述語へ制御を移します。
・コード例(condition.p)
,$x = 10 ,$y = 20 ,$x < $y ,printn("$x is smaller than $y."); # -- (1)
,$x = 10 ,$y = 20 ,$x > $y ,printn("$x is bigger than $y."); # -- (2)
・実行結果
D:\sample>adp condition.p
$x is smaller than $y.
文字列の結合
ADPでは、文字列の結合は+演算子、またはcat述語を使用します。
・コード例(cat.p)
,$str = cat("This", " is", " a", " pen."), printn($str);
・実行例
D:\sample>adp cat.p
This is a pen.
リストの結合
リストの結合は、+ 演算子を使用します。
・コード例(list_add.p)
,$x == ['a','b'] + ['c','d','e'], printn($x);
・実行例
D:\sample>adp list_add.p
[a,b,c,d,e]
配列の結合
配列の結合は、+ 演算子で行います。
・コード例(array_add1.p)
,printn({'a','b','c'} + {'d','e','f'});
・実行例
D:\sample>adp array_add1.p
{a, b, c, d, e, f}
ハッシュ形式の配列の結合も行えます。またハッシュキーが変数になる場合、以下のようにリストを使って1要素づつ追加します。
・コード例(array_add2.p)
,$key = 'C'
,$value = 'c'
,$hash={ :A => 'a', :B => 'b'} + [$key|$value]
,printn($hash);
・実行例
D:\sample>adp array_add2.p
{A => a, B => b, C => c}
リストの区切り記号とOR演算子
リストの区切り記号とOR演算子ですが同じ記号 | を使っています。
この為、意図しない解釈が行われる場合があります。
|の解釈ですが、下記のように行います。
1.式中の|は、ORとみなす。
2.リスト中の|は、リストの区切りとみなす。
3.リスト中に式があった場合は、ORとみなす。
この場合(ORおよび論理演算全体)の式の定義ですが、
・式マーカー(=)が出てきた。
・他の演算子(代入演算子、四則演算子、比較演算子)が出てきた。
となります。
以下の例で、| はOR演算子とみなされます。
,$x = $y | $z;
,$x = [$a + 10 | $b ];
,$x = [= $a | $b ];
以下の例で、|はリストの区切りとみなされます。
,$x = [$y | $z];
※リスト内で式を使用した場合、リストの区切り記号|が使えなくなります。区切り記号を使用したい場合は式をリストの外に出します。
,$a = $a + 10, $x = [$a | $b ];
Powered by ADP.