/*
 * 会話キャラクター
 * 	日本語イライザプログラム V1.0
 *			2010 (C) Copyright H.Niwa
 *
 */

? <include list>;
? <include generator>;
? <include ktaiso>;

// 置き換え
<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 (#f : #b2) (#f : #b1)>			<Replace #b2 #b1>;


// メイン処理
<Eliza>
	<print "こんにちは、イライザです。">
	<print "何か話してくださいませんか？">
	<print>
	{ 
		<printf "> ">
		::sys <getline #x 
			::sys <strdelcntl #x1 #x> 
			::sys <split #x2 #x1 "。？?">
			[<noteq #x2 ()> <print>]
			<foreach (#x3 #x2)
			    ::sys <syntax #x3
				(
				  ::ktaiso <文 #a #b>
				  <Replace #a2 #a>
				  <is #n (#a2 #b)>
				|
				  <is #n (#x2)>
				)
				::list <flatten #list #n>
				<c #list2 #list>
				::list <flatten #list3 (#list2)>
				::sys <concat #s #list3>
				<print "#" #s>
			    >
			>
			[<noteq #x2 ()> <print>]
		>
	};


// select one at random
<comb #r #l>
	::generator <permutation #r1 #l 1>
	::sys <car #r #r1>
	;

// data operation
<d #o #list>
	<comb #o #list>
	;

// Keyword and conversation data	
<c #o (#h _ :#l)>
	(<is #h ")"> | <is #h "]"> | <is #h "）"> | <is #h "】">
		| <is #h "}"> | <is #h "〕"> | <is #h "｝"> 
		| <is #h "」"> | <is #h "』">)
	<c #o #l>
	;
<c #o (#h :#l)>
	(<is #h こんにちは> | <is #h こんちは> | <is #h こんにち> 
		| <is #h ハロー>)
	<d #o (
		(こんにちは)
		)>
	;
<c #o (#h :#l)>
	(<is #h こんばんは>)
	<d #o (
		(こんばんは)
		)>
	;
<c #o (#h :#l)>
	(<is #h あは> | <is #h あはよ> | <is #h あはよう> | <is #h "おはよー"> 
		| <is #h おはようござい> | <is #h オハヨ> | <is #h "オハヨー"> )
	<d #o (
		(おはようございます)
		)>
	;

<c #o (#h ない)>
	<d #o (
		(違うということはないですか)
		(そうなんですね)
		(そうではないことはありませんか)
		(そういうことですね)
		(わかるような気がします)
		(本当ですか)
		(あなたは、#h ないことはありません)
		)>
	;
<c #o (でき :#l)>
	<d #o  (
		(できたのですね)
		(それは、良いことです)
		(ほう)
		(できたのですか、すごいですね)
		(それが望みだったのですか)
		(なんとかできないでしょうか)
		)>
	;
<c #o (あなた は :#l)>
	<d #o (
		(あなたは、#l )
		(#l  、それで良かったのです)
		(#l 、それでどうなったですか？)
		(それについてどう思いますか？)
		(私も同じです)
		)>
	;
<c #o (私 は :#l)>
	<d #o (
		(私はイライザです、あなたのためにここに居ます)
		(私は、イライザです)
		(そうなんです、あなたは #l)
		(わかりません)
		(あなたと同じです)
		(あなたは、どうなんでしょうか)
		)>
	;
<c #o (夢 :#l)>
	<d #o (
		(夢は大事です)
		(きっと、なんとかなります)
		(夢があれば、希望があります)
		(夢はかなえるものですよ)
		)>
	;
<c #o (希望 :#l)>
	<d #o (
		(希望は大事です)
		(希望を持ちましょう)
		(きっと、なんとかなります)
		(夢があれば、希望があります)
		(かなえるのが希望ですよ)
		)>
	;
<c #o (苦労 :#l)>
	<d #o (
		(苦労してもそのうちいいことありますよ)
		(希望を持ちましょう)
		(きっと、なんとかなります)
		(夢があれば、希望があります)
		(そのうちなんとかなりますよ)
		(お疲れ様です)
		)>
	;
<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 とは！！)
		)>
	;
<c #o (#h が :#l)>
	<#rand = ::sys<random _> % 2> <is #rand 1>
	<d #o (
		(#h が今後はどうなるのか興味深いです)
		(#h が楽しみです)
		(#h ですね)
		(すこし、#h について考えます)
		(やはり、#h は重要です)
		(#h を参考にしましょう)
		(#h は、飛躍しすぎです)
		(#h が実感できます)
		(#h はどうなるのでしょうか)
		(#h が気になります)
		(#l ということですね)
		)>
	;
<c #o (#h に :#l)>
	<#rand = ::sys<random _> % 2> <is #rand 1>
	<d #o (
		(#h にはどのような目的がありますか)
		(#h に期待しましょう)
		(#h はどうですか)
		(#h には困りました)
		(#h には興味ないですか)
		(それは、 #h ですね)
		(#h は、想定以上です)
		(#h には、新鮮さを感じます)
		(#h はどうなるのでしょうか)
		(なるほど、 #l ということですね)
		)>
	;
<c #o (#h を :#l)>
	<#rand = ::sys<random _> % 2> <is #rand 1>
	<d #o (
		(#h にはどのような目的がありますか)
		(ポイントは #h ですね)
		(#h は大切です)
		(#h を答えてください)
		(#h は確かです)
		(#h を待ちましょう)
		(その #h は確かですか)
		(#h はどうなるのでしょうか)
		(それは、 #h ということですね)
		(それは、 #l ということですね)
		)>
	;
<c #o (#h1 の #h2 :#l)>
	<#rand = ::sys<random _> % 2> <is #rand 1>
	<noteq #h2 "「"><noteq #h2 "『"><noteq #h2 "("><noteq #h2 "（">
	<noteq #h2 "["><noteq #h2 "{"><noteq #h2 "［"><noteq #h2 "｛">
	<d #o (
		(#h1 の #h2 には、どのような目的がありますか)
		(#h1 の #h2 が、重要なポイントです)
		(ポイントは #h1 の #h2 ですね)
		(#h1 の #h2 について話してください)
		(#h1 の #h2 は、大切です)
		(#h1 の #h2 に注目します)
		(#h1 の #h2 はどうなるのでしょうか)
		(#h1 の #h2 にふさわしくないです)
		(それは、 #h1 の #h2 ということですね)
		)>
	;
<c #o (#h から :#l)>
	<#rand = ::sys<random _> % 2> <is #rand 1>
	<d #o (
		(#h からはどこまでなのですか？)
		(それが #l ですね)
		(#h からということについてどう思いますか)
		)>
	;
<c #o (たぶん :#l)>
	<d #o (
		(それについては、よく知らないのですか)
		(#l が、もう少し考えてみましょう)
		(たしかですか？)
		(#l について、知っていることはありますか？)
		)>
	;
<c #o (そうか)>
	<d #o (
		(そうです)
		(そうですか？)
		(そうそう)
		(そうではありませんか)
		)>
	;
<c #o (いつ も :#l)>
	<d #o (
		(いつもということですが、例えばどのような時なのでしょうか？)
		(いつからですか？)
		(あなたは、いつも #l)
		(いつまででしょうか？)
		)>
	;
<c #o (イライザ :#l)>
	<d #o (
		(イライザは、マシンだから)
		(イライザは、AIです)
		(このイライザは、デカルト言語で書かれています)
		(イライザを作ったデカルト言語は、並列ロジックプログラミング言語です)
		(イライザは、あなたの問題を解決します)
		(ところでデカルト言語を知っていますか？)
		(イライザが怖くはないですか？)
		(イライザが、人々を救うと考えられませんか？)
		)>
	;
<c #o (#h か)>
	<d #o #h (
		(あなたは #h)
		(あなたは信じています)
		(あなたは信じていませんか)
		(たぶん、あなたは #h)
		)>
	;
<c #o (#h ました)>
	<d #o (
		(あなたは、#h ます)
		(そうなんですか、#h ますか)
		(なるほど、#h ますね)
		)>
	;
<c #o (#h です)>
	<d #o (
		(そうです、 #h です)
		(#h でしたのですね)
		(なるほど #h ですね)
		)>
	;
<c #o (#h だ)>
	<d #o (
		(そうです、 #h です)
		(#h でしたのですね)
		(なるほど #h ですね)
		)>
	;
<c #o (#h だった)>
	<d #o (
		(そうです、 #h です)
		(#h でしたのですね)
		(なるほど #h ですね)
		)>
	;
<c #o ()>
	<d #o (
		(ふむ、ふむ)
		(なるほど)
		(そんなことあるわけないです！)
		(そうなんですね)
		(それで、どうなるのですか？)
		(わかりますよ)
		(えーっと)
		(そうですか)
		(えっ)
		(どうしましょう)
		(どうでしょう)
		(どうですか)
		(嘘ですか)
		(思わせぶりですね)
		(何ですか、それは)
		(あなたね！)
		(教えてください)
		(ははは)
		(へへぇー)
		(ふふふ)
		(へー)
		(へぇー)
		(えぇ)
		(えー)
		)>
	;
<c #o (#l1 : #l2)>
	<c #o #l2>
	;
	

? <Eliza>;
