祖父母(X,Y):- 親(X,母(Y))。
通常、祖父母は Parent(X,Z) 、 Parent(Z,Y).... として定義されますが、上で定義した X の親 Y の親として、私にはより自然に見えます (自分自身を説明することはできません)。それよりはましです、申し訳ありません)私の質問は、その定義はまだ有効と見なされますか?そうでない場合、なぜですか?
祖父母(X,Y):- 親(X,母(Y))。
通常、祖父母は Parent(X,Z) 、 Parent(Z,Y).... として定義されますが、上で定義した X の親 Y の親として、私にはより自然に見えます (自分自身を説明することはできません)。それよりはましです、申し訳ありません)私の質問は、その定義はまだ有効と見なされますか?そうでない場合、なぜですか?
構文的に正しくないプロローグからあなたの意図を回復できる最善の方法は次のとおりです。
grandparent(X, Y) :- parent(X, Y), mother(Y).
ただし、これは半分しか当てはまりません。X は祖父母ですが、Y は孫ではなく、自分の子供を持つ女児です。grandparent(X,Y)
が期待通りの定義を持つためには、中間世代と何かを論理的に統一する必要があります。それZ
が伝統的な概念の目的です。mother/2
の代わりにを定義した場合、つまりが の母であるmother/1
ことをmother(Mother, Child)
意味する場合、基本的には の同義語を持ち、ソリューションは通常の定義と変わりません。子供は男です。本当に、それは 1/4 しか正しくありません。Mother
Child
parent/2
Prolog には、他のプログラミング言語の意味での暗黙的な戻り値がないことに注意してくださいparent(X, mother(Y))
。