diff options
Diffstat (limited to 'prolog/problems/family_relations')
-rw-r--r-- | prolog/problems/family_relations/cousin_2/common.py | 5 | ||||
-rw-r--r-- | prolog/problems/family_relations/cousin_2/sl.py | 10 | ||||
-rw-r--r-- | prolog/problems/family_relations/intro_sl.html | 4 |
3 files changed, 16 insertions, 3 deletions
diff --git a/prolog/problems/family_relations/cousin_2/common.py b/prolog/problems/family_relations/cousin_2/common.py index c6d07c7..86ef5cc 100644 --- a/prolog/problems/family_relations/cousin_2/common.py +++ b/prolog/problems/family_relations/cousin_2/common.py @@ -40,6 +40,7 @@ hint_type = { 'cousin_vs_sibling': Hint('cousin_vs_sibling'), 'cousin_to_oneself': Hint('cousin_to_oneself'), 'cousin_need_not_be_parent': Hint('cousin_need_not_be_parent'), + 'predicate_always_false': Hint('predicate_always_false'), } test_cases = [ @@ -84,6 +85,10 @@ def hint(code, aux_code): return [{'id': 'gender_is_irrelevant_markup', 'start': m[0], 'end': m[1]} for m in marks] + \ [{'id': 'gender_is_irrelevant'}] + # target predicate seems to always be false + if not prolog.engine.ask_truth(engine_id, 'cousin(_, _)'): + return [{'id': 'predicate_always_false'}] + # precedence fail (AND block vs OR block) # case in point: parent(PX, X), parent(PY, Y), brother(PX, PY) ; sister(PX, PY) # or this case: parent(PX, X), parent(PY, Y), sister(PX, PY) ; brother(PX, PY) diff --git a/prolog/problems/family_relations/cousin_2/sl.py b/prolog/problems/family_relations/cousin_2/sl.py index 5b82305..c1380bf 100644 --- a/prolog/problems/family_relations/cousin_2/sl.py +++ b/prolog/problems/family_relations/cousin_2/sl.py @@ -40,7 +40,7 @@ hint = { 'precedence_fail': '''\ <p>Si morda narobe upošteval prioriteto operatorjev IN ter ALI?</p> -<p>Operator IN veže močneje od ALI, če želiš spremeniti prioriteto, +<p>Operator IN veže močneje od ALI; če želiš spremeniti prioriteto, lahko uporabiš oklepaje.</p> ''', @@ -60,6 +60,14 @@ Imata morda <code>X</code> in <code>Y</code> istega starša?</p> <p>Bratranec/sestrična pravzaprav ne rabi imeti otrok...</p> ''', + 'predicate_always_false': '''\ +<p>Vse kaže, da tvoj predikat vedno vrne "false". Si mu dal pravilno ime, si se morda pri imenu zatipkal?</p> +<p>Č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?</p> +<p>Možno je seveda tudi, da so tvoji pogoji prestrogi ali celo nemogoči (kot bi bila npr. zahteva, +da je <code>X</code> hkrati starš in sestra od <code>Y</code>).</p> +''', + # 'interesting_tidbit': '''\ # <p>Zanimivost: nalogo bi lahko rešil tudi z uporabo rešitve za relacijo "sister". # Teta je namreč sestra od starša od <code>Y</code>.</p> diff --git a/prolog/problems/family_relations/intro_sl.html b/prolog/problems/family_relations/intro_sl.html index 0e1147b..54d2e1e 100644 --- a/prolog/problems/family_relations/intro_sl.html +++ b/prolog/problems/family_relations/intro_sl.html @@ -143,7 +143,7 @@ so vsi argumenti lahko vhodi in izhodi hkrati. Nič ni strogo definirano. Temu bomo pogovorno rekli, da prolog deluje v vse (več) smeri. Vprašali smo seveda, kdo je starš od Williama. </p><p> -Privoščimo silahko še več. +Privoščimo si lahko še več. </p> <pre> ?- parent(X, Y). @@ -346,7 +346,7 @@ ancestor(X, Y) :- parent(X, Y) ; parent(X, Z), -ancestor(Z, Y). + ancestor(Z, Y). </pre> <p> Uporabili smo podpičje, logični „ali“. Preberimo pravilo: <em>če</em> je |