/*
 * 会話キャラクター
 * 	ツンデレバージョン 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 (あたし :#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 ない)>
	<d #o (
		(違うんじゃないの)
		(そうよ)
		(そういうことよ)
		(本当！)
		(あなたは、#h じゃないわ)
		)>
	;
<c #o (でき :#l)>
	<d #o  (
		(できたのね)
		(それは、良いことよ)
		(やったー)
		(できたの、すごいわ、すごいわ！)
		(それが望みだったの、本当かしら)
		(なんとかできないかしら)
		)>
	;
<c #o (あなた は :#l)>
	<d #o (
		(あなたは、#l )
		(#l  、それで良かったの)
		(#l 、それでどうなったのよ？)
		(どう思うのよ？)
		(あたしも同じ)
		)>
	;
<c #o (あたし は :#l)>
	<d #o (
		(あたしはセナ、あなたのためにここに居るのよ)
		(あたしは、セナ)
		(そうよ、あたしはセナ 、何度も言わせないでね)
		(わからないわ)
		(あなたと同じよ)
		(あなたは、どうなのよ)
		)>
	;
<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 時だわよ)
		(#t1 時 #t2 分だわよ)
		(今は #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 は本当はこんなものじゃないよね)
		(#l ということね)
		(#h なんて思いつかないわ)
		(#h は、本質ね)
		(#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 はどうなるの？)
		(#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 (#h を :#l)>
	<#rand = ::sys<random _> % 2> <is #rand 1>
	<d #o (
		(#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 ということね)
		)>
	;
<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>;
