繰り返し処理を行う方法をご紹介します。
実装方法1
<condition>
の<li>
内に、<loop>
を記述すると<li>
の処理後に上位の<condition>
を再評価します。この動作を利用して繰り返し処理を行います。
xAIML
_var_weakpoint
が「言うはずがないだろう」になるまで<condition>
タグの内容を繰り返し実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<category> <pattern>弱点はどこ?</pattern> <template> <think> <set name="_var_weakpoint">みぞおち</set> </think> <condition name="_var_weakpoint"> <li value="言うはずがないだろう"></li> <li> ええと、<get name="_var_weakpoint"/>かな?いや違うな。<br/> <think> <random> <li><set name="_var_weakpoint">言うはずがないだろう</set></li> <li><set name="_var_weakpoint">アキレス腱</set></li> <li><set name="_var_weakpoint">わきの下</set></li> </random> </think> <loop/> </li> </condition> <get name="_var_weakpoint"/> </template> </category> |
実行結果
1 2 |
user > 弱点はどこ bot > ええと、みぞおちかな?いや違うな。 ええと、アキレス腱かな?いや違うな。 言うはずがないだろう! |
実装方法2
<srai>
を繰り返し実行する実装例です。
xAIML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<category> <pattern>攻撃せよ</pattern> <template> <srai>攻撃をランダムに選び取る</srai> <condition name="_var_random_attack"> <li value="ミサイル"></li> <li> <get name="_var_random_attack"/>で攻撃します!ダメです全く効きません!<br/> <srai>攻撃をランダムに選び取る</srai> <loop/> </li> </condition> <get name="_var_random_attack"/>でもダメでした!もう攻撃手段がありません! </template> </category> <!-- 【Point】 recursion="true" を使用すると、同一の <category> を複数回呼び出すことができます。 --> <category recursion="true"> <pattern>攻撃をランダムに選び取る</pattern> <template> <think> <random> <li><set name="_var_random_attack">ミサイル</set></li> <li><set name="_var_random_attack">光線銃</set></li> <li><set name="_var_random_attack">右ストレート</set></li> </random> </think> </template> </category> |
実行結果
1 2 |
user > 攻撃せよ
bot > 光線銃で攻撃します!ダメです全く効きません! 右ストレートで攻撃します!ダメです全く効きません! ミサイルでもダメでした!もう攻撃手段がありません! |