name = 'cousin/2' slug = 'X je bratranec ali sestrična od Y' description = '''\
cousin(X, Y)
: X
je bratranec ali sestrična od
Y
.
?- cousin(andrew, Y). Y = vanessa ; Y = patricia.
Družinska drevesa so
podana s predikati parent/2
, male/1
in
female/1
.
Verjetno bi se sedaj splačalo uporabiti rešitev kakšne prejšnje naloge?
Seveda se da rešiti tudi brez prejšnjih rešitev...
''', '''\Če je PX
starš od X
in je
PY
starš od Y
ter sta
PX
in PY
brat ali sestra,
potem je X
bratranec/sestrična od Y
.
Je spol res pomemben?
''', 'gender_is_irrelevant_markup': '''\Je to res potrebno?
''', 'precedence_fail': '''\Si morda narobe upošteval prioriteto operatorjev IN ter ALI?
Operator IN veže močneje od ALI; če želiš spremeniti prioriteto, lahko uporabiš oklepaje.
''', 'cousin_vs_sibling': '''\Kako je lahko bratranec/sestrična X
hkrati tudi brat/sestra od Y
?
Si morda pozabil, da starša od X
in Y
ne smeta biti ista (pazi: če sta oba starša
navedena v bazi, potem ju lahko prolog najde kot dva različna, logično je to čisto res)?
Kako je lahko nekdo bratranec/sestrična samemu sebi?
Imata morda X
in Y
istega starša?
Poskusi prolog vprašati tole: ?- cousin(X, X).
Bratranec/sestrična pravzaprav ne rabi imeti otrok...
''', 'predicate_always_false': '''\Vse kaže, da tvoj predikat vedno vrne "false". Si mu dal pravilno ime, si se morda pri imenu zatipkal?
Če je ime pravilno, se morda splača preveriti tudi, če se nisi zatipkal kje drugje, je morda kakšna pika namesto vejice ali obratno, morda kakšna spremenljivka z malo začetnico?
Morda kakšnega pomožnega predikata nisi definiral ali si se zatipkal pri njegovem imenu?
Možno je seveda tudi, da so tvoji pogoji prestrogi ali celo nemogoči (kot bi bila npr. zahteva,
da je X
hkrati starš in sestra od Y
).
Zanimivost: nalogo bi lahko rešil tudi z uporabo rešitve za relacijo "sister".
# Teta je namreč sestra od starša od Y
.