2

私はSWI-Prologで次のプログラムを書きました:

male(reza).
male(aliakbar).
male(behrooz).
male(said).
male(aliasghar).
male(taghi).
male(gholamreza).
male(hadi).
female(fatema).
female(tahere).
female(olya).
female(fatema).
mother(fateme,reza).
mother(olya,hasan).
mother(x,y) :-
    wife(x,z),
    father(z,y).
brother(said,reza).
brother(x,y) :-
    father(z,x),
    father(z,y),
    x\==y,
    male(x).
sister(tahere,fateme).
sister(x,y) :-
    father(z,x),
    father(z,y),
    x\==y,
    female(x).
sister(olya,aliakbar).
wife(tahere,gholamreza).
father(gholamreza,hadi).
father(gholamreza, nastaran).
father(abdollah,hasan).
father(aliakbar,reza).
father(taghi,olya).
father(taghi,aliakbar).
father(taghi,aliasghar).
father(aliakbar,said).
grandfather(x,z) :-
    father(x,y),
    father(y,z).
grandfather(x,z) :-
    father(x,y),
    mother(y,z).
uncle(y,x) :-
    father(z,x),
    brother(z,y),
    male(y).
aunt(y,x) :-
    mother(z,x),
    sister(z,y),
    female(y).
cousin(y,x) :-
    aunt(z,x),
    mother(z,y),
    female(y).
cousin(y,x) :-
    aunt(z,x),
    mother(z,y),
    male(y).

「お父さん(X、Y)、お父さん(Y、Z)」に相談すると。正解を返します(名前はペルシア語です)。つまり、

X = taghi,
Y = aliakbar,
Z = reza ;
X = taghi,
Y = aliakbar,
Z = said ;
false.

しかし、祖父(X、Y)の正解は見つかりませんでした。理由を教えてください。

ありがとう。

4

1 に答える 1

1

注意:Prologではケースが非常に重要です。変数に大文字を使用しなかったため、ルールを正しく解釈できません。

于 2012-11-03T08:55:31.243 に答える