解説:define

  • (define <macro-name> <macro-definition>)
 <macro-name>という名前のマクロを作成します。
 内容は<macro-definition>によって定義されます。

  • (<macro-name>)
 <macro-name>という名前のマクロを呼び出します。
 <macro-name>内の<macro-definition>が実行されます。

  • マクロの定義:(define <マクロ名> <マクロ定義>)
  • マクロの呼び出し:(<マクロ名>)

 マクロとは、コードの置き換えになります。
 <マクロ名>の部分が、マクロに定義されたコードへ直接置換されて実行されます。
 同じ動作を何度もコードする必要がなくなり、時間や労力を節約できます。
 また、置き換えによってコード全体が短くなり、コードが読みやすくなります。

 マクロは、ZRFファイル内のどこでも定義できます。
(逆に言うと、特定のvariant内だけで定義して使うことはできないようです)
 定義されていないマクロを呼び出すとエラーになります。
 マクロはより後から書かれたマクロの定義に上書きされます。

  • (<macro-name> <$1-value> <$2-value> <$3-value>・・・)
 <macro-name>という名前のマクロを呼び出します。
 <macro-name>内の<macro-definition>が実行されます。
 <macro-definition>内の<$1>,<$2>,<$3>・・・に、<$1-value> <$2-value> <$3-value>・・・が代入されます。

※受け取った<$1>,<$2>,<$3>を再帰的に利用して次のマクロを呼び出すこともできます。

  • (<macro-name1> <$1-value> <$2-value> <$3-value>・・・)
  • (define <macro-name1>
  <macro-definition>
  ・・・・
  (<macro-name2> <$1> <$2> <$3>・・・)
  ・・・・
  )
 引数1,2,3を渡されて呼び出された<マクロ1>内で、同じ引数を渡して<マクロ2>を呼び出します。

  • マクロの呼び出し:(<マクロ名> <引数1> <引数2> <引数3>・・・)

 マクロを呼び出す際に、引数(数値ではなく、方向や駒名、ゾーン名など)を渡せます。
 これにより、移動する方向を指定したり、成った後の駒を指定したり、ゾーンを判定したりできます。
 マクロは共通でも、引数への入力値を変更することで、動作を変更できます。

 マクロ定義内で直接引数を使用する他、マクロ定義内で呼び出すマクロへさらに同じ引数を渡すことも可能です。
 再帰的に呼び出す際は、最初に呼び出された時に入力された引数を全て渡す必要はなく、一部だけ渡せます。
 例)3つの引数とともに呼び出されたマクロ1内で、次のマクロ2を呼び出す際、受け取った引数3つのうち2つだけでも渡せる

 マクロ定義内で利用している引数の総数が、マクロの呼び出し時に入力された引数の総数と一致しないとエラーになります。
 例)定義内では引数を3つ利用しているのに、マクロの呼び出し時に引数が2つしか入力されていない場合

 入力された引数の属性と、定義内で使用されている引数の属性が一致しないとエラーになります
 例)定義内では引数を方向として利用しているのに、マクロの呼び出し時に引数に駒名が入力されている場合



タグ:

ZRF言語
最終更新:2020年08月31日 19:40