/*------------------------------------------------------------------- */ /* 日本語による人的関係の説明・質問応答システム */ /*------------------------------------------------------------------- */ /* 本プログラムはAZ-Prolog V6を用いています。 */ /* */ /* 最も基本的な述語は次の3種類です。 */ /* */ /* 親子(A, B) : AはBの親。 */ /* 兄弟(A, B) : AとBは兄弟。ただし,Aの方が年長(兄または姉)。 */ /* 夫婦(A, B) : AとBは夫婦。ただし,Aが夫, Bが妻。 */ /* */ /* それぞれの性別によって,例えば    */ /* */ /* 父(A,B):-男(A),親子(A,B). */ /* 母(A,B):-女(A),親子(A,B). */ /* 兄(A,B):-男(A),兄弟(A,B). */ /* 妹(A,B):-女(A),兄弟(B,A). */ /* */ /* として表現できます。                       */ /* */ /* 基本的な入力は、以下の2通りです。 */ /* */ /*  説明("説明文").     */ /*  質問("質問文").     */ /* */ /* 説明文は、以下の2通りです。 */ /* */ /*  A は B <述部> */ /*  A は B の C <述部> */ /* */ /* 質問文は、以下の2通りです。 */ /* */ /*  A は B <疑問述部> */ /*  A は B の C <疑問述部> */ /* */ /* 必要に応じて以下の述語を追加してください。いずれも標準とする語を */ /* 先頭(以下で示すX等)に指定します。 */ /* */ /*  同義語(X, Y): 同じ意味の言葉を指定。 */ /* 反対語(X,Y) : 反対語を指定。標準となる語をXに指定。 */ /* 相手(X,Y) : 人間関係で相手を示す語を指定。例えば夫婦関係で */ /* 「夫」の相手は「妻」,「妻」の相手は「夫」といえ */ /* る。親子関係では「親」の相手は「子」,「子」の相 */ /* は「親」といえる。このような関係をこの述語で指定 */ /* する。 */ /* 属性(X,Y,Z) : Xという関係をYを頭部に持つ述語で表現し、XはZでな */ /* ければならないことを示す。例えば、 */ /*   属性(父, 親, 男) */ /* は「父」とは「親」という述語で表現し,「父」は  */ /* 「男」でなければならないことを示す。 */ /* */ /* なお、現時点で用意している述部や疑問形述部については、下記の述語 */ /* を参照して下さい。 */ /* */ jc([X],X). 述部(ZZ,Z):-append(ZZ,"なんだから", Z). 述部(ZZ,Z):-append(ZZ,"しましたよ", Z). 述部(ZZ,Z):-append(ZZ,"しましたわ", Z). 述部(ZZ,Z):-append(ZZ,"したんだわ", Z). 述部(ZZ,Z):-append(ZZ,"しました" , Z). 述部(ZZ,Z):-append(ZZ,"したんだ" , Z). 述部(ZZ,Z):-append(ZZ,"したわよ" , Z). 述部(ZZ,Z):-append(ZZ,"したよね" , Z). 述部(ZZ,Z):-append(ZZ,"なんだね" , Z). 述部(ZZ,Z):-append(ZZ,"なんだよ" , Z). 述部(ZZ,Z):-append(ZZ,"ですよね" , Z). 述部(ZZ,Z):-append(ZZ,"である" , Z). 述部(ZZ,Z):-append(ZZ,"ですよ" , Z). 述部(ZZ,Z):-append(ZZ,"ですわ" , Z). 述部(ZZ,Z):-append(ZZ,"ですね" , Z). 述部(ZZ,Z):-append(ZZ,"だって" , Z). 述部(ZZ,Z):-append(ZZ,"だよね" , Z). 述部(ZZ,Z):-append(ZZ,"なのよ" , Z). 述部(ZZ,Z):-append(ZZ,"なのだ" , Z). 述部(ZZ,Z):-append(ZZ,"なんだ" , Z). 述部(ZZ,Z):-append(ZZ,"したわ" , Z). 述部(ZZ,Z):-append(ZZ,"したよ" , Z). 述部(ZZ,Z):-append(ZZ,"です" , Z). 述部(ZZ,Z):-append(ZZ,"よね" , Z). 述部(ZZ,Z):-append(ZZ,"だよ" , Z). 述部(ZZ,Z):-append(ZZ,"だわ" , Z). 述部(ZZ,Z):-append(ZZ,"なの" , Z). 述部(ZZ,Z):-append(ZZ,"だね" , Z). 述部(ZZ,Z):-append(ZZ,"だ" , Z). 述部(ZZ,Z):-append(ZZ,"よ" , Z). 述部(ZZ,Z):-append(ZZ,"ね" , Z). 述部(ZZ,ZZ). 述部(S,Y,R, Z):-jc("は",_は),jc("の",_の), append(S,[_は|YZ],Z), append(Y,[_の|ZZ],YZ),述部(R, ZZ). 述部(S,Y,R, Z):-jc("は",_は),jc("の",_の), append(Y,[_の|YZ],Z), append(R,[_は|ZZ],YZ),述部(S, ZZ). 述部(S, R, Z):-jc("は",_は), append(S,[_は|ZZ],Z),述部(R, ZZ). 判定(S,Y,R,Z):-述部(SS,YY,RR,Z),name(S,SS),name(Y,YY),name(R,RR). 判定(S,R,Z) :-述部(SS,RR,Z) ,name(S,SS),name(R,RR). 推移生成(X,Y):-兄弟(Z,X), assertX(兄弟(Z,Y)),fail. 推移生成(X,Y):-兄弟(Y,Z), assertX(兄弟(X,Z)),fail. 推移生成(X,Y). assertX(X):-X,!. assertX(兄弟(X,Y)):-asserta(兄弟(X,Y)),write(兄弟(X,Y)),write(' '),!,推移生成(X,Y). assertX(X):-asserta(X),write(X),write(' '). assertX(_). /* 説明内容を生成する */ 説明生成(父, S,Y,親子):-!,追加(親子(S,Y)), 追加(男(S)). 説明生成(母, S,Y,親子):-!,追加(親子(S,Y)), 追加(女(S)). 説明生成(息子,S,Y,親子):-!,追加(親子(Y,S)), 追加(男(S)). 説明生成(娘, S,Y,親子):-!,追加(親子(Y,S)), 追加(女(S)). 説明生成(夫, S,Y,夫婦):-!,追加(夫婦(S,Y)), 男女追加(S,Y),削除未婚等(S,Y). 説明生成(妻, S,Y,夫婦):-!,追加(夫婦(Y,S)), 男女追加(Y,S),削除未婚等(Y,S). 説明生成(兄, S,Y,兄弟):-!,追加(兄弟(S,Y)), 追加(男(S)). 説明生成(姉, S,Y,兄弟):-!,追加(兄弟(S,Y)), 追加(女(S)). 説明生成(弟, S,Y,兄弟):-!,追加(兄弟(Y,S)), 追加(男(S)). 説明生成(妹, S,Y,兄弟):-!,追加(兄弟(Y,S)), 追加(女(S)). 説明生成(_, _,_,_). 追加(X):-assertX(X). 男女追加(S,Y):-assertX(男(S)),assertX(女(Y)). 削除未婚等(S,Y):-retract(離婚(S)),retract(離婚(Y)), retract(未婚(S)),retract(未婚(Y)). 削除未婚等(_,_). /* 離婚の場合, 夫婦関係をなくす */ 離婚判定(S,離婚):-夫婦(S,X),!, asserta(離婚(X)),retract(夫婦(S,X)). 離婚判定(S,離婚):-夫婦(X,S),!, asserta(離婚(X)),retract(夫婦(X,S)). 離婚判定(_,_). /* 説明の解析 */ 同義語判定(S,Y,RR):-同義語(R,RR),!,説明生成(R,S,Y,R1),A=..[関係表,R1],assertX(A). 同義語判定(_,_,_). 同義語判定(S, RR):-同義語(R,RR),!, X=..[R,S],asserta(X), A=..[関係表,R],assertX(A), 離婚判定(S,R). 同義語判定(_, _). 説明(ST):-判定(S,Y ,RR,ST),!, 同義語判定(S,Y,RR). 説明(ST):-判定(S, R ,ST),!, 同義語判定(S,R). 説明(_). /* 疑問形 */ 疑問(X,Z):-append(X,"したのでしょうか", Z). 疑問(X,Z):-append(X,"したのですか", Z). 疑問(X,Z):-append(X,"したのかな", Z). 疑問(X,Z):-append(X,"したのかね", Z). 疑問(X,Z):-append(X,"なのですか", Z). 疑問(X,Z):-append(X,"しましたか", Z). 疑問(X,Z):-append(X,"なんですか", Z). 疑問(X,Z):-append(X,"なんですね", Z). 疑問(X,Z):-append(X,"でしょうか", Z). 疑問(X,Z):-append(X,"したのか" , Z). 疑問(X,Z):-append(X,"でしょう" , Z). 疑問(X,Z):-append(X,"ですかね" , Z). 疑問(X,Z):-append(X,"ですわね" , Z). 疑問(X,Z):-append(X,"したの" , Z). 疑問(X,Z):-append(X,"したか" , Z). 疑問(X,Z):-append(X,"ですか" , Z). 疑問(X,Z):-append(X,"なんだ" , Z). 疑問(X,Z):-append(X,"なのか" , Z). 疑問(X,Z):-append(X,"なのだ" , Z). 疑問(X,Z):-append(X,"なのね" , Z). 疑問(X,Z):-append(X,"なの" , Z). 疑問(X,Z):-append(X,"だ" , Z). 疑問(X,Z):-append(X,"か" , Z). 疑問(X,X). 関係(X,Z):-疑問(XX,Z), append(X,"はどのような関係",XX). 関係(X,Z):-疑問(XX,Z), append(X,"はどういった関係",XX). 関係(X,Z):-疑問(XX,Z), append(X,"はどんな関係",XX). 関係(X,Z):-疑問(XX,Z), append(X,"は何の関係",XX). 関係(X,Z):-疑問(XX,Z), append(X,"の関係は何",XX). 関係(X,Z):-疑問(XX,Z), append(X,"の関係はどう",XX). 関係(X,Z):-append(X,"の関係はわかりますか",Z). 関係(X,Z):-append(X,"の関係は分かりますか",Z). 関係(X,Z):-append(X,"の関係は",Z). 関係(X,Z):-append(X,"の関係",Z). 関係(X,Z):-append(X,"とは",Z). 関係(X,Z):-append(X,"って",Z). 関係(S,Y,Z):-jc("と",_と),関係(X,Z),append(SS,[_と|YY],X),name(S,SS),name(Y,YY). 年長呼称(X,兄):-男(X). 年長呼称(X,姉):-女(X). 年長呼称(X,兄か姉). 年少呼称(X,弟):-男(X). 年少呼称(X,妹):-女(X). 年少呼称(X,弟か妹). 関係呼称(X,Y,兄弟):-男(X),男(Y),!. 関係呼称(X,Y,姉妹):-女(X),女(Y),!. 関係呼称(X,Y,兄妹):-男(X),女(Y),!. 関係呼称(X,Y,姉弟):-女(X),男(Y),!. 関係呼称(X,Y,きょうだい). 祖父母孫(S,Y,祖父と孫) :-男(S),!. 祖父母孫(S,Y,祖母と孫) :-女(S),!. 祖父母孫(S,Y,祖父または祖母と孫). 孫祖父母(S,Y,孫と祖父) :-男(Y),!. 孫祖父母(S,Y,孫と祖母) :-女(Y),!. 孫祖父母(S,Y,孫と祖父または祖母). 親子(S,Y,父と息子):-男(S),男(Y),!. 親子(S,Y,父と娘 ):-男(S),女(Y),!. 親子(S,Y,父と子 ):-男(S),!. 親子(S,Y,母と息子):-女(S),男(Y),!. 親子(S,Y,母と娘 ):-女(S),女(Y),!. 親子(S,Y,母と子 ):-女(S),!. 親子(S,Y,親子 ). 関係質問(S,Y):-祖父母(S,Y),!, 祖父母孫(S,Y,N),write(N),です. 関係質問(S,Y):-祖父母(Y,S),!, 孫祖父母(S,Y,N),write(N),です. 関係質問(S,Y):-親子(S,Y),!, 親子(S,Y,N),write(N),です. 関係質問(S,Y):-親子(Y,S),!, 親子(Y,S,N),write(N),です. 関係質問(S,Y):-兄弟(S,Y),!, 関係呼称(S,Y,R),write(R),です. 関係質問(S,Y):-夫婦(S,Y),!, write(夫婦),です. 関係質問(S,Y):-夫婦(Y,S),!, write(夫婦),です. 関係質問(_,_):-!, write(わかりません). 関係名(X,Y,N):-name(X,XX),name(Y,YY),append(XX,YY,NN),name(N,NN). 表示関係名(N,X):-同義語(X,N). 表示関係名(N,N). 質問(Z):-関係(S,Y,Z),!,関係質問(S,Y). 質問(Z):-何(S,Y,Z), !, 何関係(S,Y). 質問(Z):-疑問判定(S,Y,R,Z),!,疑問関係(S,Y,R,Z). 質問(Z):-疑問判定(S, R,Z),!,単純質問(S,R). 質問(Z):-!,write(わかりません。). 単純回答(S,夫):-未婚(S),!,write(違います。),write(S),write(は未婚です). 単純回答(S,妻):-未婚(S),!,write(違います。),write(S),write(は未婚です). 単純回答(S,夫):-離婚(S),!,write(違います。),write(S),write(は離婚しました). 単純回答(S,妻):-離婚(S),!,write(違います。),write(S),write(は離婚しました). 単純回答(S,既婚):-離婚(S),!,write(違います。),write(S),write(は離婚しました). 単純回答(S,既婚):-未婚(S),!,write(違います。),write(S),write(は未婚です). 単純回答(S,既婚):-夫婦(S,Y),!,write(そうです。),write(Y),write(の夫です). 単純回答(S,既婚):-夫婦(Y,S),!,write(そうです。),write(Y),write(の妻です). 単純回答(S,離婚):-離婚(S),!,write(そうです). 単純回答(S,離婚):-未婚(S),!,write(S), write(は結婚経験がありません). 単純回答(S,離婚):-夫婦(S,Y),!,write(いいえ). 単純回答(S,離婚):-夫婦(Y,S),!,write(いいえ). 単純回答(S,未婚):-離婚(S),!,write(離婚したので独身です). 単純回答(S,未婚):-未婚(S),!,write(そうです). 単純回答(S,未婚):-夫婦(S,Y),!,write(違います。),write(Y),write(の夫です). 単純回答(S,未婚):-夫婦(Y,S),!,write(違います。),write(Y),write(の妻です). 単純回答(S,独身):-離婚(S),!,write(そうです). 単純回答(S,独身):-未婚(S),!,write(そうです). 単純回答(S,独身):-夫婦(S,Y),!,write(違います。),write(Y),write(の夫です). 単純回答(S,独身):-夫婦(Y,S),!,write(違います。),write(Y),write(の妻です). 単純回答(S,R):-Q=..[R,S],Q,!,write(そうです). 単純回答(S,R):-反対語(R,RR),Q=..[RR,S],Q,!,write(違います). 単純回答(S,R):-Q=..[R,S,X],Q,!,write(はい、), write(X),です(R). 単純回答(S,R):-属性(R,X,Y), 反対語(Y,Z), Q=..[Z,S],Q,!, write(違います。),write(S), write(は), write(Y), write(ではありません). 単純回答(S,R):-!,write(分かりません). 単純質問(S,R):-同義語(RR,R),!,単純回答(S,RR). 何(X,Z):-疑問(XX,Z),append(X,"の何",XX). 何(X,Z):-append(X,"の何",Z). 何(X,Z):-append(X,"の",Z). 何(S,Y,Z):-jc("は",_は),何(X,Z),append(SS,[_は|YY],X),name(S,SS),name(Y,YY). 疑問(S,Y,R, Z):-jc("は",_は),jc("の",_の), append(S,[_は|YZ],Z), append(Y,[_の|ZZ],YZ),疑問(R, ZZ). 疑問(S,Y,R, Z):-jc("が",_が),jc("の",_の), append(S,[_が|YZ],Z), append(Y,[_の|ZZ],YZ),疑問(R, ZZ). 疑問(S,Y,R, Z):-jc("は",_は),jc("の",_の), append(Y,[_の|YZ],Z), append(R,[_は|ZZ],YZ),疑問(S, ZZ). 疑問(S,Y,R, Z):-jc("が",_が),jc("の",_の), append(Y,[_の|YZ],Z), append(R,[_が|ZZ],YZ),疑問(S, ZZ). 疑問(S,Y,R, Z):-jc("は",_は),jc("の",_の), append(S,[_は|YZ],Z), append(Y,[_の|ZZ],YZ),述部(R, ZZ). 疑問(S,Y,R, Z):-jc("は",_は),jc("の",_の), append(Y,[_の|YZ],Z), append(R,[_は|ZZ],YZ),述部(S, ZZ). 疑問(S, R, Z):-jc("は",_は), append(S,[_は|ZZ],Z),疑問(R, ZZ). 疑問判定(S,Y,R,Z):-疑問(SS,YY,RR,Z),name(S,SS),name(Y,YY),name(R,RR). 疑問判定(S, R,Z):-疑問(SS, RR,Z), name(S,SS),name(R,RR). 関係判定(S,Y,R):- Q=..[R,S,Y], Q. 関係判定(Y,S,R):- Q=..[R,S,Y], Q. 判定述語(S,Y,RR,Q):- 同義語(R,RR),同義語(SS,S),同義語(YY,Y), 属性(R,R1,R2),X=..[R2,SS],X, Q=..[R1,S,YY]. 判定述語(S,Y,R,Q) :- 属性(R,R1,R2), X=..[R2,S],X, Q=..[R1,S,Y]. 判定述語(S,Y,R,Q) :- Q=..[R,S,Y]. 複合判定(S,Y,R):- 判定述語(S,Y,R,Q),Q. 判定述語(S,RR,Q) :- 同義語(R,RR), 同義語(SS,S),属性(R,R1,R2), X=..[R2,SS],X, Q=..[R1,SS]. 判定述語(S,R,Q) :- Q=..[R,S]. 複合判定(S,R) :- 判定述語(S,R,Q),Q. 誰(X,Z) :-疑問(XX,Z), append(X,"は誰" , XX). 誰(X,Z) :-疑問(XX,Z), append(X,"はだれ", XX). 誰(X,Z) :-疑問(XX,Z), append(X,"は" , XX). 誰(Y,R,Z):-誰(X,Z),jc("の",_の), append(Y,[_の|R],X). 誰判定(Y,R,Z):-誰(YY,RR,Z),name(Y,YY),name(R,RR). です(Z):-write(の), write(Z),write(です). です:-write(です). 質問判定(誰, S, 兄) :-兄(X,S),!,兄は誰(S). 質問判定(誰, S, 姉) :-姉(X,S),!,姉は誰(S). 質問判定(誰, S, 弟) :-弟(X,S),!,弟は誰(S). 質問判定(誰, S, 妹) :-妹(X,S),!,妹は誰(S). 質問判定(誰, S, 親) :-親子(X,S),!,親は誰(S). 質問判定(誰, S, 父) :-父(X,S),!,write(X),です. 質問判定(誰, S, 母) :-母(X,S),!,write(X),です. 質問判定(誰, S, 祖父):-祖父(X,S),!,祖父は誰(S). 質問判定(誰, S, 祖母):-祖母(X,S),!,祖母は誰(S). 質問判定(誰, S, 夫) :-夫婦(X,S),!,write(X),write(です). 質問判定(誰, S, 妻) :-夫婦(S,X),!,write(X),write(です). 質問判定(誰, _, _) :-!, write(わかりません). 質問判定(S, 誰, 兄) :-兄(S,X),!,兄複数(S). 質問判定(S, 誰, 姉) :-姉(S,X),!,姉複数(S). 質問判定(S, 誰, 弟) :-弟(S,X),!,弟複数(S). 質問判定(S, 誰, 妹) :-妹(S,S),!,妹複数(S). 質問判定(S, 誰, 親) :-親子(S,X),!,親複数(S). 質問判定(S, 誰, 父) :-父(S,X),!,write(X),です. 質問判定(S, 誰, 母) :-母(S,X),!,write(X),です. 質問判定(S, 誰, 祖父):-祖父(S,X),!,祖父複数(S). 質問判定(S, 誰, 祖母):-祖母(S,X),!,祖母複数(S). 質問判定(S, 誰, 孫) :-孫(S,X),!,孫複数(S). 質問判定(S, 誰, 夫) :-夫婦(S,X),!,write(X),です. 質問判定(S, 誰, 妻) :-夫婦(X,S),!,write(X),です. 質問判定(S, 誰, _) :-!, write(わかりません). 質問判定(S, 誰 , R, X ):-複合判定(S,X,R). 質問判定(S, だれ, R, X ):-複合判定(S,X,R). 質問判定(S, R , 誰, X ):-複合判定(S,X,R). 質問判定(S, R , だれ,X ):-複合判定(S,X,R). 質問判定(S, Y , R, そう):-複合判定(S,Y,R). 質問判定( _ , _ , _, _):-write(わかりません). 兄複数(S):-兄(S,X),write(X),write(' '),fail. 兄複数(_):-です(兄). 姉複数(S):-姉(S,X),write(X),write(' '),fail. 姉複数(_):-です(姉). 弟複数(S):-弟(S,X),write(X),write(' '),fail. 弟複数(_):-です(弟). 妹複数(S):-妹(S,X),write(X),write(' '),fail. 妹複数(_):-です(妹). 親複数(S):-親子(S,X),write(X),write(' '),fail. 親複数(_):-です(親). 祖父複数(S):-祖父(S,X),write(X),write(' '),fail. 祖父複数(_):-です(祖父). 祖母複数(S):-祖母(S,X),write(X),write(' '),fail. 祖母複数(_):-です(祖母). 孫複数(S):-孫(S,X),write(X),write(' '),fail. 孫複数(_):-です(孫). 兄は誰(S) :-兄(X,S),write(X),write(' '),fail. 兄は誰(_) :-です. 姉は誰(S) :-姉(X,S),write(X),write(' '),fail. 姉は誰(_) :-です. 弟は誰(S) :-弟(X,S),write(X),write(' '),fail. 弟は誰(_) :-です. 妹は誰(S) :-妹(X,S),write(X),write(' '),fail. 妹は誰(_) :-です. 親は誰(S) :-親子(X,S),write(X),write(' '),fail. 親は誰(_) :-です. 祖父は誰(S):-祖父(X,S),write(X),write(' '),fail. 祖父は誰(_):-です. 祖母は誰(S):-祖母(X,S),write(X),write(' '),fail. 祖母は誰(_):-です. 孫は誰(S) :-孫(S,X),write(X),write(' '),fail. 孫は誰(_) :-です. 兄(S,X):-男(S), 兄弟(S,X). 姉(S,X):-女(S), 兄弟(S,X). 弟(S,X):-男(S), 兄弟(X,S). 妹(S,X):-女(S), 兄弟(X,S). 子供(S,息子):-男(S). 子供(S,娘):-女(S). 子供(S,子供). 弟妹(S,弟):-男(S). 弟妹(S,妹):-女(S). 弟妹(S,弟か妹). 兄姉(S,兄):-男(S). 兄姉(S,姉):-女(S). 兄姉(S,兄か姉). 祖父母呼称(S,祖父):-男(S),!. 祖父母呼称(S,祖母):-女(S),!. 祖父母呼称(S,祖父母). 親呼称(S,父):-男(S),!. 親呼称(S,母):-女(S),!. 親(S,親). 祖父母(S,Y):-親子(S,Z),親子(Z,Y). 父(X,Y):-男(X),親子(X,Y),!. 母(X,Y):-女(X),親子(X,Y),!. 祖父(X,Y):-男(X), 祖父母(X,Y). 祖母(X,Y):-女(X), 祖父母(X,Y). 孫(X,Y):-祖父母(Y,X). 夫(X,Y):-夫婦(X,Y),!. 妻(X,Y):-夫婦(Y,X),!. 何関係(S,Y):- 祖父母(S,Y),!,祖父母呼称(S,R), write(R),です. 何関係(S,Y):- 孫(S,Y),!,write(孫),です. 何関係(S,Y):- 親子(S,Y),!,親呼称(S,R),write(R),です. 何関係(S,Y):- 親子(Y,S),!,子供(S,R),write(R),です. 何関係(S,Y):- 夫婦(S,Y),!,write(夫です). 何関係(S,Y):- 夫婦(Y,S),!,write(妻です). 何関係(S,Y):- 兄弟(S,Y),!,兄姉(S,R),write(R),です. 何関係(S,Y):- 兄弟(Y,S),!,弟妹(S,R),write(R),です. 何関係(S,Y):- write(分かりません。). 違います:-write('違います。'). 確認判定(S,Y,R):-複合判定(S,Y,R), !, write('そうです。'). 確認判定(S,Y,R):-属性(R,X,R2),反対(R2,R3), Q=..[R3,S],Q, !, write('男女が異なります。'). 確認判定(S,Y,_):-親子(S,Y),!, 違います,何関係(S,Y). 確認判定(S,Y,_):-親子(Y,S),!, 違います,何関係(S,Y). 確認判定(S,Y,_):-兄弟(S,Y),!, 違います,何関係(S,Y). 確認判定(S,Y,_):-兄弟(Y,S),!, 違います,何関係(S,Y). 確認判定(S,Y,_):-夫婦(S,Y),!, 違います,何関係(S,Y). 確認判定(S,Y,_):-夫婦(Y,S),!, 違います,何関係(S,Y). 確認判定(S,Y,_):-祖父母(S,Y),!, 違います,何関係(S,Y). 確認判定(S,Y,_):-祖父母(Y,S),!, 違います,何関係(S,Y). 確認判定(S,Y,_):-!, write('分かりません。'). 疑問関係(S,Y,R,Z):-同義語(RR,R),同義語(SS,S),同義語(YY,Y),質問判定(SS,YY,RR),!. 疑問関係(S,Y,R,Z):-相手(RR,R),質問判定(Y,S,RR),!,write(X),です. 疑問関係(S,Y,R,Z):-確認判定(S,Y,R). 反対(X,Y):-反対語(X,Y). 反対(X,Y):-反対語(Y,X). 同義語(父,父親). 同義語(父,男親). 同義語(父,親父). 同義語(父,父君). 同義語(母,母親). 同義語(母,女親). 同義語(母,お袋). 同義語(母,母君). 同義語(息子,御子息). 同義語(息子,息子さん). 同義語(息子,お坊ちゃん). 同義語(息子,お坊ちゃま). 同義語(娘,御令嬢). 同義語(娘,娘さん). 同義語(娘,お譲さん). 同義語(娘,お譲さま). 同義語(娘,お譲様). 同義語(娘,御譲様). 同義語(子,子供). 同義語(子,お子さん). 同義語(子,お子さま). 同義語(子,お子様). 同義語(子,御子様). 同義語(夫婦,夫妻). 同義語(夫婦,めおと). 同義語(夫婦,女夫). 同義語(夫,亭主). 同義語(夫,旦那). 同義語(夫,旦那様). 同義語(夫,夫君). 同義語(夫,主人). 同義語(夫,ご主人). 同義語(夫,婿). 同義語(夫,お婿さん). 同義語(夫,お婿様). 同義語(夫,御婿様). 同義語(夫,花婿). 同義語(夫,婿殿). 同義語(夫,婿様). 同義語(妻,夫人). 同義語(妻,おかみさん). 同義語(妻,奥様). 同義語(妻,奥さん). 同義語(妻,細君). 同義語(妻,女房). 同義語(妻,嫁). 同義語(妻,嫁女). 同義語(妻,花嫁). 同義語(妻,嫁様). 同義語(妻,お嫁様). 同義語(妻,お嫁さま). 同義語(妻,嫁さん). 同義語(兄,兄貴). 同義語(兄,にいさん). 同義語(兄,兄さん). 同義語(兄,おにいさん). 同義語(兄,お兄さん). 同義語(兄,お兄様). 同義語(兄,御兄様). 同義語(兄,兄君). 同義語(姉,姉貴). 同義語(姉,ねえさん). 同義語(姉,姉さん). 同義語(姉,おねえさん). 同義語(姉,お姉さん). 同義語(姉,お姉様). 同義語(姉,御姉様). 同義語(姉,姉君). 同義語(弟,弟さん). 同義語(妹,妹さん). 同義語(兄弟,ご兄弟). 同義語(兄弟,御兄弟). 同義語(姉妹,ご姉妹). 同義語(姉妹,御姉妹). 同義語(兄弟,弟兄). 同義語(兄妹,妹兄). 同義語(姉弟,弟姉). 同義語(姉妹,妹姉). 同義語(女,女性). 同義語(女,婦人). 同義語(男,男性). 同義語(男,殿方). 同義語(誰,だれ). 同義語(既婚,既婚者). 同義語(未婚,未婚者). 同義語(独身,独身者). 同義語(X,X). 反対語(男,女). 相手(親,子). 属性(祖父,祖父母,男). 属性(祖母,祖父母,女). 属性(夫,夫婦,男). 属性(妻,夫婦,女). 属性(父,親,男). 属性(母,親,女). 属性(兄,兄,男). 属性(弟,弟,男). 属性(姉,姉,女). 属性(妹,妹,女). exe_q(Z):-append(ZZ,"?" ,Z),!, 質問(ZZ). exe_q(Z):-append(ZZ,"か" ,Z),!, 質問(Z) . exe_q(Z):-append(ZZ,"。" ,Z),!, 説明(ZZ). exe_q(Z):-!, 説明(Z). qmain:- repeat,nl,read_line(X, _, _, _),exe_q(X), fail.