関数一覧に統合しました。里々に最初から登録されている関数。satori_conf.txtのSAORI定義を全て削除しても使える物。あれ?あの関数が無い?それはたぶんあっちにありますよ。単語群@くだものに単語バナナが追加されます。@くだものりんご追加された単語の情報はsatori_savedata.txtに保存されます。dic***.txtのどこかに既にその単語群が記述してあり、その中に1つ以上単語が入っている必要があります。@くだものが無ければ新規に作成します。追加した単語の削除、編集はできません。里々Mc135-1で修正されました。†(追加単語の全削除、単語群名)単語の追加で入れた単語を全て削除。里々Mc140-1以降で使用可能です。(合成単語群、A、B、C)A/B/Cそれぞれの単語群の内容全てからランダム選択されます。†(バイト値、1)こう書くとバイト値1が簡単に得られるように。ほかにバイト値3なども同じ書き方で得ることができる。1だとメールを処理する時の分割子がバイト1なので、リプレイスとかでバグる可能性あり。1ではないものを推奨する、が、0とか入れると大変なことになるらしい。分割子は自分でも設定できるので、使わない記号が一番安全かも。[注意]when,times,while,forについてこれらの関数は、引数内の括弧を展開するタイミングを遅らせる仕様の関係から、(バイト値、1)などの関数が実行されるタイミングも遅れてしまうので、(バイト値、1)で引数を区切ろうとしても、正しく認識されないようです。whenはifと同じ処理になり、ループ系の関数は(C0)が常に空になります。†call関数を参照のこと。特殊なので別ページに移してあります。†Mc158-1から追加。call関数に与える引数を「名前」で与えるバージョンの関数。$v0【タブ】ユーザ名$v1【タブ】ユーザさん(vncall,set,v0,v1)このように書くと、呼び出す際に(call,set,(v0),(v1))こういったイメージで解釈され、v0とv1がその名前の「中身」に置き換えられます。最終的に(set,ユーザ名,ユーザさん)と呼び出したのと同じ結果が得られます。「最初に引数を区切った後はそれ以降引数を区切らない」というルールがあります。これにより里々の区切り文字問題を解決できます。ssuのsplit関数を使って文字を「,(カンマ)」で区切りたい場合、普通に呼び出すと「,」が区切り文字として解釈されて期待する結果が得られませんが、vncallで次のように書くと期待通りの結果を得ることが出来ます。$v0【タブ】区切りたい,文字$v1【タブ】,(vncall,split,v0,v1)ただし、vncallはwhenのような引数を解釈するタイミングに違いのある関数を呼び出した場合をサポートしておらず、よくわからない結果になることがあるので使わないように気をつけてください。†(nop,引数)何もしない。さおりの戻り値を捨てるときなどに使う。SAORIのmciaudioなどでお世話になるはず。†(remember,位置)過去に話した内容の取得。(remember,0)で直前。†(set,変数名,値)変数に値を代入する。(値が式の場合計算結果が入る)$変数名=値と基本的には同じ。(set,変数名,)と空を代入する事で変数の削除ができる点も同じ。†(sync,物,引数1,引数2...引数n)処理をしゃべりと同期させる。SAORIを任意のタイミングで発動させる時に。†(when,式,真の場合[,偽の場合])Mc145-1より追加。「式」が計算され、結果が0以外なら「真の場合」を返し、0なら「偽の場合」を返す。if関数で、機能は引数が事前に評価されない点を除いて"if"と同じ。[注意]引数区切りについてwhen関数の区切りを(バイト値、1)のように括弧で呼び出すとifと同じ動作になってしまうようです。⇒対処法さんぷる1、ifとwhenの動作の違い*さんぷる1:ifの場合(set、変数1、0)(set、変数2、0)(if、1、(set、変数1、1)、(set、変数2、1))変数1は(変数1)#=>1変数2は(変数2)#=>1:whenの場合(set、変数1、0)(set、変数2、0)(when、1、(set、変数1、1)、(set、変数2、1))変数1は(変数1)#=>1変数2は(変数2)#=>0さんぷる2、再帰呼出し(関数の中で自分自身を関数として呼び出す)*さんぷる2:10の階乗は(call、階乗、10)です。†(whenlist,左辺,右辺1,結果1[,右辺2,結果2[...,右辺n,結果n]][,偽の結果])whenと違う点は、条件式が左右に分かれたことと、複数の条件を順番に評価できること。ifに対するiflistのような立ち位置の関数で、iflistとは違い、結果の引数は条件が決まるまで事前に評価されません。左辺と右辺1を組み合わせた条件式を評価し、真ならば結果1を評価して返します。なければ左辺と右辺2と組み合わせ、真ならば結果2を評価して返します。なければ左辺と右辺3を...以下略。偽の結果はいずれの条件も満たさない場合に返されます。偽の結果が指定されていない場合は、空を返します。間食)上記のサンプルが動作するとき、以下のように動作します。例として、(現在時)は「12」としましょう。左辺の「(現在時)==」と右辺1の「6」を連結して評価します。「(現在時)==6」は、現在時が12なので、偽(成立しない)となり、結果1の「朝飯」は実行されません。次に、左辺の「(現在時)==」と右辺2の「12」を連結して評価します。「(現在時)==12」は、現在時が12なので、真(成立する)となり、結果2の「昼飯」が実行されません。成立するものがあったので、それ以降の右辺と結果は実行されません。結果、上記のwhenlist関数は「昼飯」を返します。里々ではループは構文でサポートされていない為、関数またはジャンプ文で実現します。loop関数のみ昔からある関数で、times,for,while関数は、整備班verで追加された関数です。この二つにはループ本文やループカウンタの扱いで下記の差があります。ループ本文loop関数ループ本文を関数外に用意する必要があります、引数として呼出先の*または@名を渡します。times,for,while関数ループ本文を引数として記述出来ます、関数外にループ本文を置く場合は明示的に呼び出す必要があります。(ループ中にループ回数を数えている変数)loop関数("呼出先の*または@名"カウンタ)times,for,while関数(C0)、多重ループの場合は上位のループカウンタを(C1)、(C2)...と参照出来ます。loop,for,times関数では出来ません、while関数かジャンプ文によるループを使って下さい。[注意]引数区切りについてtimes,while,for関数は、括弧の展開を遅らせる仕組みの関係上、(バイト値、1)のように引数区切りを括弧で呼び出すと、(C0)の中身が常に空となり、正しく動作しないようです。†ある文または単語群を指定回数ぶんループさせる関数。この関数のみループ本文を関数外で(トークや単語群で)書かないといけません。使用例(loop,文または単語群名,回数)(loop,文または単語群名,開始値,終了値)(loop,文または単語群名,開始値,終了値,増分)*文または単語群名ループさせたい本文ループ中は本文に([文または単語群名]カウンタ)という名前の変数が使用できるようになります。カウンタの開始値〜終了値を制御します。増分は1ループ時に増加するカウンタ量。