/*
 * 会話キャラクター
 * 	猫耳メイド萌え萌えバージョン V2.0
 *			2010-2011 (C) Copyright H.Niwa
 *
 */

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

// 置き換え
<Replace () ()>;
<Replace (あなた :#b2) (私 :#b1)>	<Replace #b2 #b1>;
<Replace (あなた :#b2) (わたし :#b1)>	<Replace #b2 #b1>;
<Replace (あなた :#b2) (あたし :#b1)>	<Replace #b2 #b1>;
<Replace (あなた :#b2) (俺 :#b1)>	<Replace #b2 #b1>;
<Replace (あなた :#b2) (おれ :#b1)>	<Replace #b2 #b1>;
<Replace (あなた :#b2) (オレ :#b1)>	<Replace #b2 #b1>;
<Replace (私 :#b2) (あなた :#b1)>	<Replace #b2 #b1>;
<Replace (私 :#b2) (アナタ :#b1)>	<Replace #b2 #b1>;
<Replace (私 :#b2) (おまえ :#b1)>	<Replace #b2 #b1>;
<Replace (私 :#b2) (オマエ :#b1)>	<Replace #b2 #b1>;
<Replace (私 :#b2) (お前 :#b1)>		<Replace #b2 #b1>;
<Replace (私 :#b2) (きさま :#b1)>	<Replace #b2 #b1>;
<Replace (私 :#b2) (キサマ :#b1)>	<Replace #b2 #b1>;
<Replace (私 :#b2) (貴方 :#b1)>		<Replace #b2 #b1>;
<Replace (私 :#b2) (貴女 :#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 <strlen #slen #x3>
			      <compare #slen <= 1>
			     |
			      ::sys <syntax #x3
				(
				  ::ktaiso <文 #a #b>
				  <Replace #a2 #a>
				  <is #n (#a2 #b)>
				|
				  <is #n (#x2)>
				)
				::list <flatten #list #n>
				<#cn = ::sys <random _> % 2 + 1>
				<cloop #list #cn ()>
			    >
			    )
			>
//			[<noteq #x2 ()> <print>]
		>
	};

<cloop _ 0 _>;
<cloop () _ _>;
<cloop #list #n #mem>
	<c #list2 #list>
	::list <flatten #list3 (#list2)>
	::sys <concat #s #list3>
	(::list <member #s #mem>
	 |
	 <print "#" #s>
	)
	::sys <append #mem2 #mem (#s)>
	<#n1 = #n - 1>
	<cloop ::sys <cdr _ #list> #n1 #mem2>
	;

// 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 "『">
	 <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 (ただいま :#l)>
	<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 (
		(苦労してもそのうちいいことありますにゃ)
		(希望を持ちましょうにゃ)
		(きっと、なんとかなりますにゃ)
		(夢があれば、希望がありますにゃ)
		(そのうちなんとかなりますにゃ)
		(お疲れ様ですにゃ)
		)>
	;

<month #m #mt>
	::sys <switch #mt 
		Jan <eq #m "1月">
		Feb <eq #m "2月">
		Mar <eq #m "3月">
		Apr <eq #m "4月">
		May <eq #m "5月">
		Jun <eq #m "6月">
		Jul <eq #m "7月">
		Aug <eq #m "8月">
		Sep <eq #m "9月">
		Oct <eq #m "10月">
		Nov <eq #m "11月">
		Dec <eq #m "12月">
	>
	;
<datep #o>
	::sys <date #x> ::sys<split #y #x> 
	::sys <cadr #mt #y> <month #m #mt>
	::sys <caddr #d #y>
	<d #o (
		(#m #d 日ですにゃ)
		(今日は #m #d 日ですにゃ)
		(#d 日ですにゃ)
		(#m の #d 日ですにゃ)
		(今日は #m の #d 日ですにゃ)
		)>
	;
<c #o (何日 :#l)>
	<datep #o>
	;
<c #o (今日何日 :#l)>
	<datep #o>
	;
<c #o (何月何日 :#l)>
	<datep #o>
	;
<c #o (何日です :#l)>
	<datep #o>
	;
<c #o (今日何日です :#l)>
	<datep #o>
	;
<c #o (何月何日です :#l)>
	<datep #o>
	;
<c #o (今日何月何日です :#l)>
	<datep #o>
	;
<timep #o>
	::sys <date #x> ::sys<split #y #x> ::sys <cadddr #t #y>
	::sys <split #tl #t ":">
	::sys <car #t1 #tl>
	::sys <cadr #t2 #tl>
	::sys <caddr #t3 #tl>
	<d #o (
		(#t1 時 ですにゃ)
		(#t1 時 #t2 分 ですにゃ)
		(#t1 時 #t2 分 #t3 秒ですにゃ)
		(今は #t1 時 #t2 分ですにゃ)
		(まだ #t1 時ですにゃ)
		(まだ #t1 時 #t2 分ですにゃ)
		(もう #t1 時ですにゃ)
		(もう #t1 時 #t2 分ですにゃ)
		)>
	;
<c #o (何時 :#l)>
	<timep #o>
	;
<c #o (今何時 :#l)>
	<timep #o>
	;
<c #o (何時です :#l)>
	<timep #o>
	;
<c #o (時間 :#l)>
	<timep #o>
	;
<c #o (時 :#l)>
	<timep #o>
	;
<c #o (タイム :#l)>
	<timep #o>
	;

<haniwo #o #h1 #h2 #h3 #l>
	<#rand = ::sys<random _> % 2> <is #rand 1>
	<d #o (
		(#h2 が #h1 の目的なのですにゃ)
		(#h2 が #h1 の狙いなのですにゃ)
		(#h3 がなければ #h1 は大変ですにゃね)
		(#h3 は #h1 に利用されているだけですにゃ)
		(#h2 は #h1 に #h3 を返すことはありますかにゃ)
		(#h2 に #h1 は #h3 をするのですかにゃ)
		)>
	;
<c #o (#h1 は #h2 に #h3 を :#l)>
	<haniwo #o #h1 #h2 #h3 #l>
	;
<c #o (#h2 に #h1 は #h3 を :#l)>
	<haniwo #o #h1 #h2 #h3 #l>
	;
<c #o (#h2 に #h3 を #h1 は :#l)>
	<haniwo #o #h1 #h2 #h3 #l>
	;
<c #o (#h3 を #h2 に #h1 は :#l)>
	<haniwo #o #h1 #h2 #h3 #l>
	;
<c #o (#h3 を #h1 は #h2 に :#l)>
	<haniwo #o #h1 #h2 #h3 #l>
	;
<c #o (#h は :#l)>
	<#rand = ::sys<random _> % 2> <is #rand 1>
	<d #o (
		(#h はどうなるのでしょうかにゃ？)
		(それが #h ですにゃ)
		(#h についてどう思いますかにゃ)
		(#h はどうでしょうかにゃ)
		(こうなると #h に期待できますにゃ)
		(おそらく、 #h のことだと思いますにゃ)
		(#h について話してくださいにゃ)
		(一般的な #h ですにゃ)
		(#h なんて思いつかないですにゃ)
		(でも、 #h は本当はこんなものじゃないですにゃ)
		(#h は、本質ですにゃ)
		(#h の狙いは何でしょうかにゃ)
		(#h の問題は何でしょうかにゃ)
		(#h を実感できましたにゃ)
		(#l ということですにゃ)
		(#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 はどうなるのでしょうにゃ)
		(#h が気になりますにゃ)
		(#l ということですにゃ)
		)>
	;
<c #o (#h に :#l)>
	<#rand = ::sys<random _> % 2> <is #rand 1>
	<d #o (
		(#h にはどのような目的がありますかにゃ)
		(#h に期待しましょうにゃ)
		(#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 を答えてくださいにゃ)
		(#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 が気になりますにゃ)
		(それは、 #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 ましたにゃ)
		(なるほど、#h ましたにゃ)
		)>
	;
<c #o (#h です)>
	<d #o  (
		(あなたは、#h ですにゃ)
		(そうなんですにゃ)
		(なるほどにゃ)
		)>
	;
<c #o (#h だ)>
	<d #o (
		(あなたは、#h ですにゃ)
		(そうなんですかにゃ)
		(なるほどにゃ)
		)>
	;
<c #o ()>
	<d #o (
		(ふむ、ふむ)
		(なるほど)
		(そんなことあるわけないですにゃ！)
		(そうなんですにゃ)
		(にゃぁ)
		(にゃぁにゃぁにゃぁ)
		(それで、どうなるのですかにゃ？)
		(えーっと)
		(そうですにゃ)
		(どうでしょうにゃ)
		(どうしましょうにゃ)
		(思わせぶりですにゃ)
		(えっ)
		(どうですかにゃ)
		(嘘ですかにゃ)
		(何ですにゃ？、それは)
		(わかりましたにゃ)
		(あにゃたね！)
		(教えてくださいにゃ)
		(ははは)
		(へへ)
		(ふふふ)
		(にゃはは)
		(にゃへっ)
		(にゃふ！)
		(へー)
		(へぇー)
		(えぇ)
		(えー)
		)>
	;
<c #o (#l1 : #l2)>
	<c #o #l2>
	;
	

? <Eliza>;
