summaryrefslogtreecommitdiff
path: root/prolog/problems/family_relations
diff options
context:
space:
mode:
Diffstat (limited to 'prolog/problems/family_relations')
-rw-r--r--prolog/problems/family_relations/cousin_2/common.py5
-rw-r--r--prolog/problems/family_relations/cousin_2/sl.py10
-rw-r--r--prolog/problems/family_relations/intro_sl.html4
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