最近の更新 (Recent Changes)

2014-01-01
2013-01-04
2012-12-22
2012-12-15
2012-12-09

Wikiガイド(Guide)

サイドバー (Side Bar)

--
← 前のページに戻る

デカルト言語のプログラムの中のメッセージの変更

ファイル「Eliza-jp」が、デカルト言語で書かれたプログラムの本体です。 このファイルの中身を変更することにより、キャラクタの性格付けを行いましょう。

ここでは、元の「Eliza-jp」を簡単に改造する方法について説明しましょう。

(デカルト言語を習得すれば、さらに自由自在に直すことができるようになります。)

1. 人称の変換

相手を表す「あなた」と、自分を表す「私」を変更してキャラクタの特徴を出してみましょう。

プログラムの最初のほうにある、置き換えをする"<Replace ~"となっている場所に修正を加えます。

<Replace ((あなた :#a1):#b2) ((私 :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((あなた :#a1):#b2) ((わたし :#a1):#b1)><Replace #b2 #b1>;
<Replace ((あなた :#a1):#b2) ((あたし :#a1):#b1)><Replace #b2 #b1>;
<Replace ((あなた :#a1):#b2) ((俺 :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((あなた :#a1):#b2) ((おれ :#a1):#b1)> <Replace #b2 #b1>;
<Replace ((あなた :#a1):#b2) ((オレ :#a1):#b1)> <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((あなた :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((アナタ :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((おまえ :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((オマエ :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((お前 :#a1):#b1)>     <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((きさま :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((キサマ :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((貴方 :#a1):#b1)>     <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((貴女 :#a1):#b1)>     <Replace #b2 #b1>;

「あなた」を「あんた」に変更し、「私」を「あたし」に変更しましょう。

<Replace ((あなた :#a1):#b2) ((私 :#a1):#b1)>   <Replace #b2 #b1>;
      前の人称          後の人称

Replaceには、前と後に2箇所に人称名がありますが、前だけを変更します。 後は変更しません。

<Replace ((あんた :#a1):#b2) ((私 :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((あんた :#a1):#b2) ((わたし :#a1):#b1)><Replace #b2 #b1>;
<Replace ((あんた :#a1):#b2) ((あたし :#a1):#b1)><Replace #b2 #b1>;
<Replace ((あんた :#a1):#b2) ((俺 :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((あんた :#a1):#b2) ((おれ :#a1):#b1)> <Replace #b2 #b1>;
<Replace ((あんた :#a1):#b2) ((オレ :#a1):#b1)> <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((あなた :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((アナタ :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((おまえ :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((オマエ :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((お前 :#a1):#b1)>     <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((きさま :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((キサマ :#a1):#b1)>   <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((貴方 :#a1):#b1)>     <Replace #b2 #b1>;
<Replace ((私 :#a1):#b2) ((貴女 :#a1):#b1)>     <Replace #b2 #b1>;

これ以降にも、「私」と「あなた」がプログラム内にあります。 これらはすべて変更しておきましょう。

変換するときには、空白など他の文字が変更の影響を受けないように慎重に行いましょう。

2. メイン処理の最初の挨拶メッセージ

「//メイン処理」とある場所のすぐ下に、プログラムを起動したときの挨拶メッセージがあります。

これを、新しいキャラクターらしいメッセージに変更します。

// メイン処理
<Eliza>
        <print "こんにちは、イライザです。">
        <print "何か話してくださいませんか?">
        <print>
        {
                <printf "> ">
                ::sys <getline #x

"こんにちは、イライザです。" と "何か話してくださいませんか?"の部分を変更してください。

3. メッセージの選択

メッセージは、パターンマッチによってどれを選ぶか決めます。

たとえば、以下のようなメッセージでは、「~は~。」にパターンマッチします。 "<c ... >"の引数でパターンマッチを表します。

<c #o (#h は :#l)>
	<#rand = ::sys<random _> % 2> <is #rand 1>
	<d #o (
		(#h はどうなるのでしょうか?)
		(それが #h ですね)
		(#h についてどう思いますか)
		(#h はどうでしょうか)
		(こうなると #h に期待できますね)
		(おそらく、 #h のことだと思います)
		(#h について話してください)
		(一般的な #h ですね)
		(#h なんて思いつかないです)
		(でも、 #h は本当はこんなものじゃないですよね)
		(#l ということですね)
		(#h は、本質ですね)
		(#h の狙いは何でしょうか)
		(#h の問題は何でしょうか)
		(#h を実感できました)
		(#l には、ワクワクしますね)
		(なんと! #l とは!!)
		)>
	;

パターンマッチすると"<d ...>"の中に含まれているメッセージが一つランダムに選ばれて出力されます。

変更や追加するメッセージの選択の参考にしてください。

4. メッセージの変更

// Keyword and conversation data とある下に応答メッセージがあります。

この中の()で囲まれたメッセージを、新しいキャラクタが話しそうなメッセージに直します。

        <d #o (
                (こんにちは)
                )>
        ;

例えば、(こんにちは)の部分を直します。

メッセージは、必ず半角かっこ()で囲まれていなければならないことに注意してください。

        <d #o (
                (コンチハ)
                )>
        ;

メッセージに、!?%などの記号を使うときには、それを半角のダブルクォート""で囲まなければなりません。かっこをメッセージ内で使いたい場合にも同様に""で囲みます。

        <d #o (
                (コンチハ "!")
                )>
        ;

さらにメッセージの中に#hや#lなどの変数が使われているものには注意しなければなりません。

                (あなたは、#h ないことはありません)


上の例では、#hは変数であり、プログラムにより値が変換されます。

そのため、変数であることを確実に保障するために、変数の前後には必ず半角スペースがなくてはなりません。メッセージを変更するときに、誤って空白を消さないように注意しましょう。

5. メッセージの追加

メッセージの後ろに、新規にメッセージを追加することができます。 そのときは、必ずメッセージの前後を他のメッセージと同様に、かっこ()で囲まなければなりません。

6. 変更のチェック

ここまでの変更をチェックしてみましょう。繰り返しになりますがポイントは以下です。

- 括弧()の対応が取れているか?

- 半角記号は、ダブルクォーテーションで囲まれているか?

- 変数(#h, #h1, #lなど)の前後に、半角空白が入っているか?

問題なければ実行して試してみましょう。

途中で異常終了する場合には、もう一度上のポイントを中心にチェックしなおしてください。

また、メッセージが思ったのと異なるイメージで出てくる場合には、どんどん直していきましょう。

思い通りの応答をするようになったら、完成です。