最近の更新 (Recent Changes)

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

Wikiガイド(Guide)

サイドバー (Side Bar)


← 前のページに戻る

0.4 サザエさんの親子関係

サザエさんの親子関係を定義し、それについて応答するプログラムを作成します。


// サザエさんの親子関係

// 親子関係の事実

フネはサザエの母親です。
フネはカツオの母親だ。
フネはワカメの母親です。

サザエは、タラオの母親です。

波平は、サザエの父親です。
波平は、カツオの父親です。
波平は、ワカメの父親です。

マスオは、タラオの父親です。


// 祖父、祖母、親の関係の定義

#祖母は#親の母親で、#親は#孫の親のとき、#祖母は#孫の祖母です。
#祖父は#親の父親で、#親は#孫の親のとき、#祖父は#孫の祖父です。

#親が#子の父親のとき、#親が#子の親である。
#親が#子の母親のとき、#親が#子の親である。

// 質問

#親がワカメの父親であるか。
波平がタラオの祖父であるか。
波平が#xの父親であるか。
サザエが#xの母親であるか。
#xがカツオの母親であるとき、#zがカツオの父親であるか。
#xがワカメの母親であるとき、#zがワカメの父親であるか。
#xが#yの母親のとき、#zが#yの父親であるか。
#xが#yの母親の場合、#zが#yの父親であるすべて。
#zが#yの父親であるすべて。

さっそく実行してみましょう。

上のプログラムはsamples/sazae.mrsに入っているとします。


$ descartes murasaki samples/sazae.mrs


#親がワカメの父親であるか。
波平は、ワカメの父親です。

波平がタラオの祖父であるか。
波平は、タラオの祖父です。

波平が#xの父親であるか。
波平は、サザエの父親です。

サザエが#xの母親であるか。
サザエは、タラオの母親です。

#xがカツオの母親であるとき、#zがカツオの父親であるか。
フネは、カツオの母親である場合、波平は、カツオの父親です。

#xがワカメの母親であるとき、#zがワカメの父親であるか。
フネは、ワカメの母親である場合、波平は、ワカメの父親です。

#xが#yの母親のとき、#zが#yの父親であるか。
フネは、サザエの母親である場合、波平は、サザエの父親です。

#xが#yの母親の場合、#zが#yの父親であるすべて。
フネは、サザエの母親である場合、波平は、サザエの父親です。
フネは、カツオの母親である場合、波平は、カツオの父親です。
フネは、ワカメの母親である場合、波平は、ワカメの父親です。
サザエは、タラオの母親である場合、マスオは、タラオの父親です。

#zが#yの父親であるすべて。
波平は、サザエの父親です。
波平は、カツオの父親です。
波平は、ワカメの父親です。
マスオは、タラオの父親です。

「~すべて」という質問は複数の回答を得るのに使います。

正しい結果が得られているでしょうか?

このプログラムは次に示すようなデカルト言語のプログラムに変換されて実行されたものです。


 <M2 母親 フネ (サザエ)>
        ;
 <M2 母親 フネ (カツオ)>
        ;
 <M2 母親 フネ (ワカメ)>
        ;
 <M2 母親 サザエ (タラオ)>
        ;
 <M2 父親 波平 (サザエ)>
        ;
 <M2 父親 波平 (カツオ)>
        ;
 <M2 父親 波平 (ワカメ)>
        ;
 <M2 父親 マスオ (タラオ)>
        ;
 <M2 祖母 #祖母 (#孫)> 
     <M2 母親 #祖母 (#親)> 
     <M2 親 #親 (#孫)>
        ;
 <M2 祖父 #祖父 (#孫)> 
     <M2 父親 #祖父 (#親)> 
     <M2 親 #親 (#孫)>
        ;
 <M2 親 #親 (#子)> 
     <M2 父親 #親 (#子)>
        ;
 <M2 親 #親 (#子)> 
     <M2 母親 #親 (#子)>
        ;

? <printf '#親がワカメの父親であるか。' <\_n>>;
? <回答 (<M2 父親 #親 (ワカメ)>)>;
? <print>;
? <printf '波平がタラオの祖父であるか。' <\_n>>;
? <回答 (<M2 祖父 波平 (タラオ)>)>;
? <print>;
? <printf '波平が#xの父親であるか。' <\_n>>;
? <回答 (<M2 父親 波平 (#x)>)>;
? <print>;
? <printf 'サザエが#xの母親であるか。' <\_n>>;
? <回答 (<M2 母親 サザエ (#x)>)>;
? <print>;
? <printf '#xがカツオの母親であるとき、#zがカツオの父親であるか。' <\_n>>;
? <回答 (<M2 母親 #x (カツオ)> <M2 父親 #z (カツオ)>)>;
? <print>;
? <printf '#xがワカメの母親であるとき、#zがワカメの父親であるか。' <\_n>>;
? <回答 (<M2 母親 #x (ワカメ)> <M2 父親 #z (ワカメ)>)>;
? <print>;
? <printf '#xが#yの母親のとき、#zが#yの父親であるか。' <\_n>>;
? <回答 (<M2 母親 #x (#y)> <M2 父親 #z (#y)>)>;
? <print>;
? <printf '#xが#yの母親の場合、#zが#yの父親であるすべて。' <\_n>>;
? <回答すべて (<M2 母親 #x (#y)> <M2 父親 #z (#y)>)>;
? <print>;
? <printf '#zが#yの父親であるすべて。' <\_n>>;
? <回答すべて (<M2 父親 #z (#y)>)>;
? <print>;


--

--