Elona_ADDT変数記述解説

Last-modified: 2013-02-05 (火) 23:39:40

Elona_ADDTの変数に関わる記述について、テキスト作成者向けのより噛み砕いた解説を行う
ページです。とりあえず利用することができるくらいの解説が目的なので、仕様的に必ずしも
望ましいとはいえない言い回しをすることがあります。
また、まずはADDTのテキスト記述の際の拡張書式を把握していないと以下の解説を把握するのは難しいと思われます。
なお、ここに書かれたものは基本的にADDT最新版で全て動作しているのを確認しています。



ADDT変数記述の基本的前提

  • 変数=Key
    ADDTにおいては変数のことをKeyと呼ぶが、Keyは
    ・半角スペース、半角アットマーク、半角コンマ、半角セミコロンのいずれも含まない
    ・数字のみで構成されていない
    といった条件で作成される。つまり、下記の例文にある「var_1」、「恋愛イベント進行度」、「二人称」などはみなKeyである。またこれらKeyというのは変数(文字列)を格納する場所である。
    後述する命令文により、例えば「恋愛イベント進行度」に「1」という値を代入すると、「恋愛イベント進行度」という条件は「1」の状態となる。この状態で、ある台詞に「恋愛イベント進行度」=「1」の時という条件が付加されていたなら、その台詞が発言されるようになる。
     
    なおこのようにKeyに対し数値が代入されているように思えるが、それは擬似的なものであり、代入されているものは全て文字列として扱われている。
     
    またこのKeyとKeyに代入された変数はキャラごとに保存され、キャラとキャラ同士で代入による干渉を行うことは出来ない(別のテキスト間でKeyを変化させることはできない)。それが可能なのがグローバルキーである。
 

またなにかKeyを作成した場合、そのKeyが最初に格納している変数は「-1」となっている。
「恋愛イベント進行度」を例にすると、「恋愛イベント進行度」が「-1」の状態の時、つまり「恋愛イベント進行度」Keyに何も変数が代入されていない初期状態では、プレイヤーと恋愛が始まるような台詞を設定し、「-1」の時に設定した台詞が発言されると「恋愛イベント進行度」に「1」が代入され、さらに次に「恋愛イベント進行度」が「1」でないと発言されない台詞が出るようになる、といったように用いる。

  • 命令文
    ここでは台詞部分の後ろに「@」から続けてKeyに文字列等を代入するための命令文について説明するが、下の例文で使われている本当に初歩的なもののみを取り扱う。
     
    • @substitution Key Str
      例:@substitution 恋愛進行度フラグ "1"
      最も初歩的なADDTの変数命令文であると思われる。この場合、 " " で囲まれたStr-「1」をKey-「恋愛イベント進行度」に代入するという意味。
      これに合わせて「%$strcomparison 恋愛イベント進行度 equal "1"」、つまりKey-「恋愛イベント進行度」が「1」である時という条件が設定されていた場合、その台詞が発言されるようになる。
       
    • @concatenation Key Str1 Str2
      例:@concatenation 二人称 PCName "さん"
      Str1とStr2を連結させた状態でKeyに代入するという命令文。この場合、Key-「二人称」にStr1-「PCName」とStr2-「さん」が連結したものが代入される。PCName等についてはStrに入る内容の一覧表を参照。これに応じた形で他の文章内に{二人称}といった置換形式文を記述していると、この命令文を設定した台詞が発言された後に
      {二人称}部分が「プレイヤーの名前+さん」と表示されるようになる。例文ではこれを複数設定していて、「二人称」Keyに複数の呼び名が代入可能となっている。
 
  • @initialization
    用いられている全ADDT変数を初期化する命令文。例文では用いられていないが、恋愛イベントを1からやりなおすことができるようにする、テスト時に変数の状態を初期化したい、といった場合に使えるだろう。
 
  • 条件文
    条件名備考
    $strcomparison Str1 equal Str2Str1とStr2が同じとき
    $strcomparison Str1 instr Str2Str1がStr2の中にあるとき
    例1:$strcomparison 恋愛イベント進行度 equal "-1"
    例2:$strcomparison 恋愛イベント進行度 equal "1"
    StrとあるがKeyもそのうちに入るので、Keyの比較条件に用いることが出来る。既存の「$comparison X1 Con X2」もX部分にKeyを用いることが出来るが、Keyを用いた条件指定を行う場合はこちらを使う方が無難ではあるだろう。
    例文は、例1が「恋愛イベント進行度」が「-1」、つまりKey「恋愛イベント進行度」に対して何も代入が行われていない初期の状態に対する条件文であり、例2がその初期の状態に対し、「恋愛イベント進行度」が「1」を代入されているような状態に対する条件文である。
     
    ちなみに、次の例のようにStrは「1」などではなく、「お兄ちゃん」のような文字列を一致条件にとることもできる。詳細は例文1参照。
     
    「$strcomparison Str1 instr Str2」はStr2の成立条件を複数に設定できる条件文である。
    例えば次のように条件を設定することが出来る。
    %txtDialog,JP
    変数条件を変えますか?{c}一%ichi{ev},,,,,{c}二%ni{ev},,,,,{c}七%nana{ev},,,,,
    $strcomparison 変数条件 instr "一_二_三_四_五"
    一~五ですよ!
    %txtichi,JP
    一にしました♪@substitution 変数条件 "一"
    %txtni,JP
    二にしました♪@substitution 変数条件 "二"
    %txtnana,JP
    七にしました♪@substitution 変数条件 "七"
    %endtext
    この場合、選択肢でKey「変数条件」にStr「一」「二」「七」のどれかを代入することとなる。
    そして条件文「$strcomparison 変数条件 instr "一_二_三_四_五"」で「変数条件」=「一~五」の時に
    台詞が発言される。もしこれが「equal」ならば「変数条件」=「一_二_三_四_五」の時にしか台詞が発言されない。
 

変数記述例と解説

ADDT作者様が作成された例文を基に解説を行っていきます。

 

例文1 Readme記載のものより


例:
%txtDialog,JP
聖夜祭、その… {var_1}と一緒に行きたいのですが… ダメですか?
$strcomparison var_1 equal "-1"[rank 7]
/呼び名が決まっていないとき
あの… 私はあなたのことをなんと呼んだらいいでしょうか?{c}呼び捨てでいい%Yobisute{ev},,,,,{c}ご主人様だろjk%Gosyujinsama{ev},,,,,{c}お兄ちゃん!%Oniityan{ev},,,,,
%txtYobisute,JP
/呼び捨てにする(以降var_1にはプレーヤーの名前+さんが代入される)
わ、わかりました! えっと… {player}……さん@concatenation var_1 PCName "さん"
%txtGosyujinsama,JP
/ご主人様(以降var_1はご主人様)
ご主人様ですねっ!わかりました!ごしゅじんさびゃっ!{n}{n}(どうやら舌を噛んでしまったようだ。痛みと羞恥で顔を真っ赤にしている)@substitution var_1 "ご主人様"
%txtOniityan,JP
/お兄ちゃん(以降var_1はお兄ちゃん)
えっ、お、お兄ちゃんですか!? …わかりました!お、お兄ちゃん!@substitution var_1 "お兄ちゃん"


この例文の中で用いられているKeyは「var_1」のみである。
このテキストをキャラに設定後、まず「$strcomparison var_1 equal "-1"[rank 7]」の条件による台詞が発言される。これは[rank 7]により優先度が最大に設定されているためで、それにより「var_1」にプレイヤーの呼び方が代入される前に「聖夜祭、その… {var_1}と一緒に行きたいのですが… ダメですか?」が発言される事態を防げる。また「var_1」などのKeyは代入が行われない限り初期は必ず「-1」の状態である。

 

次に選択肢会話で分岐されるようになっている。呼び捨ての場合、命令文「concatenation」により、「var_1」にStr1「PCName」とStr2「さん」が連結されて代入される。
これにより「var_1」は以後「PCNameさん」の文字列を格納しており、「聖夜祭、その… "プレイヤーさん"と一緒に行きたいのですが… ダメですか?」のように表示される。他の選択肢は命令文「substitution」により、それぞれ"ご主人様"、"お兄ちゃん"と表示されるようになる。

 

ここで重要なのは選択肢を選んだ時点で「var_1」=「PCNameさん」や「お兄ちゃん」となり、「$strcomparison var_1 equal "-1"[rank 7]」の条件が満たされず、
以後この呼び名を選択する台詞が出ないようになっている点である。

 

ちなみに、次の例のようにStrは「1」などではなく、「var_1」に「お兄ちゃん」のような文字列が二人称として代入されている場合も一致条件として扱うことが出来る。

 

例:Key「var_1」にStr「お兄ちゃん」が代入されている場合。
%txtDialog,JP
$strcomparison var_1 equal "お兄ちゃん"
{var_1}!今日はいっしょに寝てもいい?


 

例文2 「カブの少女」より

次のテキストから例としてわかりやすいように変数が関係している部分のみ抜粋。
※下のファイルと例文は同じ内容ではなく、例文は編集者が動作を確認するために手を加えている。

名前対応ヴァリアント作者名ファイル備考改変二次配布
ADDT変数利用例:カブの少女ADDTADDT作者様fileTEXT変数の作成・利用例××

例:
%txtDialog,JP
{二人称}がここまで畑仕事を極めてくれるなんて思っていませんでした{n}{n}びっくりです
今日は{二人称}に最新の情報を教えますよ。メモの用意はいいですか?{n}{n}あたしの誕生日は9月の1日ですよ。1日生まれなんて縁起がいいですね
%$strcomparison 恋愛イベント進行度 equal "-1",impression 100 -,!married[rank 6]
けほっ、けほっ{c}どうしました?%doushimashita{ev},,,,,
%$strcomparison 恋愛イベント進行度 equal "1",impression 150 -,!where Home,!married[rank 6]
{二人称}に見せたいものがあるので家にいってもらえますか?
%$strcomparison 恋愛イベント進行度 equal "1",impression 150 -,where Home,!married[rank 6]
{二人称}に見せたいものがあるのですかこちらに来ていただけますか?{c}わかりました%wakatta{ev},,,,,
%$strcomparison 恋愛イベント進行度 equal "2",impression 200 -,!where Home,!married[rank 6]
{二人称}にまた見せたいものがあるので家にいってもらえますか?
%$strcomparison 恋愛イベント進行度 equal "2",impression 200 -,where Home,!married[rank 6]
{二人称}にまた見せたいものがあるのですかこちらに来ていただけますか?{c}わかりました%wakatta2{ev},,,,,
%$strcomparison 初めて話しかけたフラグ equal "-1"[rank 7]
はじめまして、私は{nnpc}といいます。これからよろしくおねがいしますね{n}ところで{二人称}……{c}何ですか?%nandesuka{ev},,,,,@substitution 初めて話しかけたフラグ "1",concatenation 二人称 PCName "さん"
%$strcomparison 二人称変更フラグ equal "-1",strcomparison 恋愛イベント進行度 equal "3",married[rank 7]
ついに結婚しちゃいましたね。ところで{二人称}、{二人称}を呼ぶときどうよんだらいいですか?{c}あなた%anata{ev},,,,,{c}今までどおり%imamadedoori{ev},,,,,{c}呼び捨て%yobisute{ev},,,,,{c}お兄ちゃん%oniityan{ev},,,,,
%endText

%txtnandesuka,JP
ジョウロが似合いそうですね、これをどうぞ。期待していますよ{n}{n}(あなたはジョウロとカブの種をもらった)
%txtdoushimashita,JP
どうやらカゼを引いてしまったようです{n}{n}そういえばカゼって誰かにうつすと治るってよく言いますよね@substitution 恋愛イベント進行度 "1"
%txtwakatta,JP
(家の裏出の湖に1羽のカモが住みついている){n}{n}かわいいでしょう、トルテっていうんですよ。私が名づけました@substitution 恋愛イベント進行度 "2"
%txtwakatta2,JP
(家の裏出の湖にもう1羽カモが住みついている){n}{n}グリモアっていいまして、トルテと夫婦みたいですよ。いいですね、いつ子供が生まれるか楽しみです@substitution 恋愛イベント進行度 "3"
%txtanata,JP
わかりました、{二人称}♪@substitution 二人称 "あなた",substitution 二人称変更フラグ "1"
%txtimamadedoori,JP
わかりました、{二人称}♪@concatenation 二人称 PCName "さん",substitution 二人称変更フラグ "1"
%txtyobisute,JP
わかりました、{二人称}♪@substitution 二人称 PCName,substitution 二人称変更フラグ "1"
%txtoniityan,JP
わかりました、{二人称}♪@substitution 二人称 "お兄ちゃん",substitution 二人称変更フラグ "1"
%endText


ここで用いられているKeyは「二人称」「初めて話しかけたフラグ」「恋愛イベント進行度」「二人称変更フラグ」の4つである。これらも当然命令文による文字列(Str)の代入が行われるまでは「-1」の状態である。基本的な仕組みは例文1と同じで、「-1」の状態の時の台詞で「1」の状態となり、「1」の時の台詞で「2」となるような命令文が台詞に設定されている、というものである。またKey「二人称」は例文1で言う「var_1」に相当する。ただしこちらでは「二人称」そのものは台詞が発言される条件にはなっていない。

 

この例文の特徴の一つは
「%$strcomparison 恋愛イベント進行度 equal "1",impression 150 -,!where Home,!married[rank 6]」
のように、Keyの代入状態による条件の他に好感度や場所、結婚状態、優先度指定を組み合わせて条件文が構成されている点である。
これにより「恋愛イベント進行度」が「1」になってなおかつ好感度が一定以上、といった条件によるイベントの表現がなされている。

 

さらにKey「二人称」であるが、初めて話しかけたときは「PCName "さん"」が自動的に代入され、結婚後は例文1のように選択肢によって代入内容を選べるようになっている。
ちなみに例文1と違い、テキストを設定したキャラに話しかけた時点で {二人称}部分に「PCName "さん"」が代入されているが、これはその台詞が表示される時点で命令文「concatenation」が実行されているためである。

 

またこのテキストは初めて会う前後、恋愛イベントが始まる前後、恋愛イベント進行が順番通りに発言されないと意味をなさないものであるため、[rank 7]で最優先に初めて会ったときの会話が発言されるように、その次に[rank 6]で恋愛イベントが条件を満たした時に最優先で発言されるようにそれぞれ設定されている。
イベントを演出する時の記述全般で言えることであるが、例文のように段階ごとにKeyにランクを設定するなどして、一度発言された台詞が次に出ないようにする仕掛けが必要である。

 

ちなみに恋愛イベント会話を最初からできるようにしたい場合には以下のような設定もありえる。


%txtDialog,JP
%$where Home[rank 5]
状況をリセットしますか?{c}はい%hai{ev},,,,,{c}いいえ%iie{ev},,,,,
%END
%txthai,JP
わかりました♪清いお付き合いをしましょうね♪@substitution 二人称 "-1",substitution 二人称変更フラグ "-1",substitution 初めて話しかけたフラグ "-1",substitution 恋愛イベント進行度 "-1"
%txtiie,JP
わかりました♪いままでどおりよろしくお願いしますね♪


これはテキストに存在する全てのKeyを「-1」、つまり初期状態に戻すというものである。わかりやすいように一つ一つのKeyを初期化しているが、命令文「@initialization」でも可能である。このようなテキストの場合、Keyの状態が複雑に絡み合って構成されている可能性が高くなるので、何か一つのKeyのみを初期化するのは注意が必要である。
また初期化を行う台詞を設定する場合、初期化命令文が付与されている台詞が発言される状況をある程度明確にする必要がある。例えばDialog会話の中でランダムに初期化台詞が発言されるのは危険である。上の例文のように、一定の場所で確実に発言されるようにすると良いのではないか。

 

グローバルキーの記述に関する解説

基本的にグローバルキーの解説は上記の変数記述方法を把握していることを前提としておこなう。

 

基本的な前提

グローバルキーとはすべてのテキストから参照できるキーのことである。上記のKeyの扱いではキャラAのテキストに設定されたKeyに他のキャラBのテキストから変数を代入することはできなかったが、グローバルキーならばキャラ間のKeyの代入による変更が可能である。

 

例文1 グローバルキーによるロミアスbotの作成例

名前対応ヴァリアント作者名ファイル備考改変二次配布
ロミアス擬似bot本体ADDTADDTスレ1スレ目
228
fileTEXTグローバルキーの作成・利用例
ロミアス側
ロミアス擬似bot子機ADDT迷子の子猫まっしぐらfileTEXTグローバルキーの作成・利用例
ロミアスへ話しかける側
 

例:ロミアス側
%txtCalm,JP
%$strcomparison global:ロミアス_擬似bot equal "-1"
「本当に始めてしまったのか?(ニヤリ」@substitution global ロミアス_擬似bot "0"
%$strcomparison global:ロミアス_擬似bot equal "0"
「…おかしな冒険者も居るものだな」
「何事も試してみるものだ。何度でもやり直せばいい(ニヤリ」
「斜に構えるものがまともであった試しが無いぞ」
「我々は、争い事を好まない」
「生まれながらにして、人生は決まっているのか?」
「自分を重んじる程の余裕は無いさ。これはエレアの宿命だ」
カチャカチャと弓を手入れする音が聞こえる。
ロミアスはにやりと笑った。
%$strcomparison global:ロミアス_擬似bot equal "1"
「…本当に食べてしまったのか?(ニヤリ」@substitution global ロミアス_擬似bot "0"
%$strcomparison global:ロミアス_擬似bot equal "2"
「…まさか食べてしまうのか?」@substitution global ロミアス_擬似bot "0"
%$strcomparison global:ロミアス_擬似bot equal "3"
「おいおい、冗談だろう?」@substitution ロミアス_擬似bot global "0"
%$strcomparison global:ロミアス_擬似bot equal "4"
「我等の意見を知って、君は少しでも変わるのか?」@substitution global ロミアス_擬似bot "0"
%$strcomparison global:ロミアス_擬似bot equal "5"
「我々は非戦闘部族だ。ゆえに君らと戦争する気も愚かさも無い」@substitution global ロミアス_擬似bot "0"
%$strcomparison global:ロミアス_擬似bot equal "6"
「最悪の場合、諦めることも必要ということだ」@substitution global ロミアス_擬似bot "0"
%$strcomparison global:ロミアス_擬似bot equal "7"
「…そうだな。これも私の悪いクセだ、分かっている」@substitution global ロミアス_擬似bot "0"
%$strcomparison global:ロミアス_擬似bot equal "8"
「時既に時間切れという名台詞を知らないのか?(ニヤリ」@substitution global ロミアス_擬似bot "0"
%$strcomparison global:ロミアス_擬似bot equal "9"
「やはり文明が変わらなければ、世界も変わらないのか」@substitution global ロミアス_擬似bot "0"
%$strcomparison global:ロミアス_擬似bot equal "妹"
「君とは縁がありそうだな…」@substitution global ロミアス_擬似bot "0"
%$strcomparison global:ロミアス_擬似bot equal "おはよう"
「おはよう。清々しい朝だな(ニヤリ」@substitution global ロミアス_擬似bot "0"
%$strcomparison global:ロミアス_擬似bot equal "おやすみ"
「ああ、おやすみ。安心して眠るといい。私は君を取って食おうとは思ってないからな」@substitution global ロミアス_擬似bot "0"
%$strcomparison global:ロミアス_擬似bot equal "ありがとう"
「どうした、急に。変なものにでも影響されたのか?(ニヤリ」@substitution global ロミアス_擬似bot "0"
%endTxt

 

例:ロミアスへ話しかける側
%txtCalm,JP
「これはッ……人肉か!?」@substitution global ロミアス_擬似bot "1"
「これはッ……うまそうじゃないか!?」@substitution global ロミアス_擬似bot "2"
「ロミアス!君を殺してやる!」@substitution global ロミアス_擬似bot "3"
「ロミアス!君は現状をどう考えている!」@substitution global ロミアス_擬似bot "4"
「エレアは戦う気はないのか!ロミアス!」@substitution global ロミアス_擬似bot "5"
「くそっ、ロミアス!もう間に合わないというのか!」@substitution global ロミアス_擬似bot "6"
「ロミアス!人を笑うのはよくないぞ!」@substitution global ロミアス_擬似bot "7"
「ロミアス!間に合うのか!」@substitution global ロミアス_擬似bot "8"
「世界は非常だね!ロミアス!」@substitution global ロミアス_擬似bot "9"
「ロミアスお兄ちゃん!」@substitution global ロミアス_擬似bot "妹"
「ありがとう!ロミアス!」@substitution global ロミアス_擬似bot "ありがとう"
$when Morning
「おはよう!ロミアス!」@substitution global ロミアス_擬似bot "おはよう"
$when Midnight
「おやすみ!ロミアス!」@substitution global ロミアス_擬似bot "おやすみ"
%endTxt


 

例:
%$strcomparison global:ロミアス_擬似bot equal "-1"
「本当に始めてしまったのか?(ニヤリ」@substitution global ロミアス_擬似bot "0"
%$strcomparison global:ロミアス_擬似bot equal "0"
「…おかしな冒険者も居るものだな」

 

グローバルキーに変数を代入して作成する場合、命令(substitution等)とKey(ロミアス_擬似bot等)の間に「global」を記述すればよい。
またグローバルキーの状態に対する条件文を作成する場合は、「global:Key」のように記述すればよい。

 

上の例文で、最初はKey「ロミアス_擬似bot」は「-1」なので、[本当に始めてしまったのか?(ニヤリ」@substitution global ロミアス_擬似bot "0"]が発言され、次にKeyは「0」の状態となる。
それに対し、話しかける側が"[「これはッ……人肉か!?」@substitution global ロミアス_擬似bot "1"]と発言すると、Keyは「1」となり、ロミアス側は[「…本当に食べてしまったのか?(ニヤリ」@substitution global ロミアス_擬似bot "0"]を発言することになる。

 

ロミアス側の台詞のほぼ全てに[@substitution global ロミアス_擬似bot "0"]の命令文が付与されているのは、
一度「…本当に食べてしまったのか?(ニヤリ」が発言されたとして、それが再度繰り返し発言されることのないように
Keyの状態をリセットするためである。

 

ただし、「これはッ……人肉か!?」が発言された後、ロミアス側が「本当に食べてしまったのか?(ニヤリ」を発言する前に子機側が[「ロミアス!君を殺してやる!」@substitution global ロミアス_擬似bot "3"]を発言すると、次にロミアス側はKey状態「3」が条件の「おいおい、冗談だろう?」を発言することになる。Calmの場合、
発言タイミングはキャラの速度に依存するがそれでもランダムなので、どうしてもこうした混線は起こりうる。
テキストの書き方にもよるが、親機側と子機側は親機側のキャラ速度が早いほうが正確な応答となるだろう。

 
 
 

またこの解説の内容でわかる通り、ADDTグローバルキーを使ったテキストを幾つか併用していたとして、使っているグローバルキーが意図せずに重複していた場合、
発言内容がめちゃくちゃなことになってしまう。
そのためグローバルキーはある程度重複しないような文字列とするか、当WikiのADDT使用済みグローバルキーに使ったものを書き込んでおくことが推奨される。

記述上の細かな注意点

 
  • 選択肢を記述する際の「$条件文」と「%txt~」の位置
    ADDTで選択肢会話を記述する際、「$」で始まる条件文と「%txt」で始まるタグが同居することになるが、
    その位置に注意。例えば、
    例:
    %txtDialog,JP
    $strcomparison var_1 equal "-1"[rank 6]
    あの… 私はあなたのことをなんと呼んだらいいでしょうか?{c}呼び捨てでいい%Yobisute{ev},,,,,{c}ご主人様だろjk%Gosyujinsama{ev},,,,,{c}お兄ちゃん!%Oniityan{ev},,,,,
    %txtYobisute,JP
    (略)
    %txtGosyujinsama,JP
    (略)
    %txtOniityan,JP
    (略)
    $strcomparison var_1 equal "お兄ちゃん"
    {var_1}!今日はいっしょに寝てもいい?
    このように「%txt」が挟まる形で記述してしまうと、「$strcomparison var_1 equal "お兄ちゃん"」が「%txtDialog,JP」ではなく、「%txtOniityan,JP」の下位の条件となってしまう。作成された選択肢会話用のタグはテキスト内の別の位置に隔離しておく必要がある。
    ※もちろん「$」から始まる条件文を選択肢会話用のタグの下において使うことも出来る。
     
     
  • 条件文「strcomparison Str1 instr Str2」を使う際の注意
    上記にあるように、この条件文はKeyの変数状態の一致対象に複数の条件をとることができるものであるが、ADDTで扱われているのは基本的に全て文字列であることに注意しなければならない。
    例:Key「変数条件」が0~10で変化するように設定されている場合
    %txtDialog,JP
    $strcomparison 変数条件 instr "2_3_4_5_10"
    このようにKey「変数条件」が0~10の中で「2,3,4,5,10」の時のみに発言する、となるような条件文が設定されているように見えるが、実際のところ、これだと「0,1,2,3,4,5,10」の時に発言してしまう。
    これは「10」というのは数値ではなく、「1」と「0」の文字列に過ぎないためである。