Loading
糖衣構文(シンタックスシュガー)
関数形式
述語の一番最後の引数を戻り値として扱うことができ、述語を式の中で使用すると、関数のようなります。
以下の2つのコードは同様に動作します。
sfunc1.p
+pi(3.14);
,pi($pi),printn($pi);
sfunc2.p
+pi(3.14);
,$pi == pi,printn($pi);
メソッド形式
'.'キーワードを使用することによりメソッド呼び出しのように述語を呼び出せます。
'.'の左側にある項を述語の最初の引数として扱われます。
前述のsfunc1.pは . を使用することにより、以下のように記述できます。
sfunc3.p
+pi(3.14);
,pi($pi),$pi.printn;
メソッド形式は、その名のとおり、変数や項をオブジェクトに見立ててメソッドのように見せるだけで、最初の引数に指定したとものと変わりないですが、この仕組みによりclassキーワードを書かなくてもメソッドを作成できる利点があり、より自由にメソッドの定義が行えます。
関数形式とメソッド形式とを組み合わせることで余分な変数を記述する必要がなくなりコードがすっきりします。
sfunc4.p
+pi(3.14);
,pi.printn;
pi述語の最後の引数$piとprintn述語の最初の引数$piが共に同じ変数の為 . キーワードを使用することにより変数$piの記述を省略することが出来ます。
関数形式で配列を受け取る
関数形式で戻り値(可変長)を配列で受け取る場合、述語名の後ろに'@'を付与します。
以下の例では、県名と県庁所在地を配列で受け取り(kencho@)、csv形式に変換し(csv)、表示します(printn)。またnext述語でバックトラックを行い、マッチする全ての県、県庁所在地を表示します。
注)バグの為、以下のコードですが、Ver7.0では実行例のようになりません。Ver7.1以降(5/23リリース予定)でお試しください。
コード例(sarray.p)
+kencho('茨城県','水戸市');
+kencho('栃木県','宇都宮市');
+kencho('群馬県','前橋市');
+kencho('埼玉県','さいたま市');
+kencho('千葉県','千葉市');
+kencho('東京都','新宿区');
+kencho('神奈川県','横浜市');
,kencho@.csv.printn,next;
実行例
D:\>adp sarray.p
茨城県,水戸市
栃木県,宇都宮市
群馬県,前橋市
埼玉県,さいたま市
千葉県,千葉市
東京都,新宿区
神奈川県,横浜市
,kencho@.csv.printn,next;
上記のコードは以下のコードと同じです。
,kencho(@x),csv(@x,$y),printn($y),next;
リストのキーアクセス
リストに対して[]を使用するとキーアクセスとみなされるように変換されます。
コード例(slist.p)
,$x == [ ['key1' | 'value1'], ['key2' | 'value2'], ['key3' | 'value3'] ]
,print($x['key1']);
実行例
D:\sample>adp slist.p
value1
リストに対する[]は、以下のように item 述語の呼び出しに置き換えられます。
item($x,"key1",$item~1)
式
式は、それぞれの演算子を実装する述語の並びとしてコンパイルされます。
,$x == $b + 10
上記のコードは以下のコードに変換されます。
,_add( $b, 10, $x)
Powered by ADP.