summaryrefslogtreecommitdiff
path: root/prolog/problems/lists/dup_2/sl.py
diff options
context:
space:
mode:
Diffstat (limited to 'prolog/problems/lists/dup_2/sl.py')
-rw-r--r--prolog/problems/lists/dup_2/sl.py47
1 files changed, 20 insertions, 27 deletions
diff --git a/prolog/problems/lists/dup_2/sl.py b/prolog/problems/lists/dup_2/sl.py
index eeefbd0..1513dda 100644
--- a/prolog/problems/lists/dup_2/sl.py
+++ b/prolog/problems/lists/dup_2/sl.py
@@ -27,18 +27,28 @@ potem je to skupaj ravno podvojen seznam.</p>
hint = {
'eq_instead_of_equ': '''\
<p>Operator <code>==</code> je strožji od operatorja <code>=</code> v smislu, da je za slednjega dovolj,
-da elementa lahko naredi enaka (unifikacija). Morda z uporabo <code>=</code> narediš predikat
-<code>insert/3</code> delujoč tudi v kakšni drugi smeri. To bo kasneje znalo priti prav!</p>
+da elementa lahko prilagodi (unifikacija).</p>
<p>Seveda pa lahko nalogo rešiš brez obeh omenjenih operatorjev, spomni se, da lahko unifikacijo narediš
implicitno že kar v argumentih predikata (glavi stavka).</p>
''',
'eq_instead_of_equ_markup': '''\
-<p>Morda bi bil bolj primeren operator za unifikacijo (=)?</p>
+<p>Morda bi šlo brez tega?</p>
+''',
+
+ 'base_case_missing_[]': '''\
+<p>Tvoj robni pogoj je sicer smiselen, a ne deluje za poseben primer: prazen seznam. Malce ga predelaj.
+Ne naredi pa dveh robnih pogojev, ker bo to prineslo nov problem: pravilne rešitve se bodo podvajale.</p>
+''',
+
+ 'base_case_arbitrary': '''\
+<p>Kako je lahko rezultat podvajanja praznega seznama poljuben seznam oz. karkoli?
+Matematiki bi rekli: "Dvakrat nič je nič in ne karkoli."</p>
+<p>Če je tvoj robni pogoj <code>dup([], _).</code>, ga še enkrat premisli: kaj je rezultat podvajanja?</p>
''',
'base_case': '''\
-<p>Si pomislil na robni pogoj? Na katero mesto v seznamu najlažje vstaviš nek element?</p>
+<p>Si pomislil na robni pogoj? Kakšen seznam najlažje "podvojiš"?</p>
''',
'recursive_case': '''\
@@ -58,28 +68,11 @@ da je <code>X</code> hkrati starš in sestra od <code>Y</code> ali kaj podobno z
<p>Morda pa je kriv tudi manjkajoč, neustrezen ali preprosto nekompatibilen (s splošnim primerom) robni pogoj?</p>
''',
- 'ins_results_in_empty_list': '''\
-<p>Kako je lahko rezultat vstavljanja v seznam prazen seznam?</p>
-<p>Če je to tvoj robni pogoj, ga še enkrat premisli: kaj je rezultat vstavljanja?</p>
-''',
-
- 'ins_results_in_arbitrary_result': '''\
-<p>Kako je lahko rezultat vstavljanja v seznam poljuben seznam oz. karkoli?</p>
-<p>Če je to tvoj robni pogoj, ga še enkrat premisli: kaj je rezultat vstavljanja?</p>
-''',
-
- 'lost_heads': '''\
-<p>Element je vstavljen, ampak vsi pred njim so se pa izgubili, kajne?
-Si pozabil dati glavo nazaj na začetek seznama, ko se vračaš iz rekurzije?</p>
-<p>Poskusi postaviti naslednje vprašanje prologu in preglej <emph>vse</emph> rešitve:</p>
-<p><code>?- insert(q, [a,b,c,d], L).</code></p>
-''',
-
- 'leading_heads_all_x': '''\
-<p>Si morda pozabil (copy/paste?) in uporabil <code>[X|T]</code> namesto bolj splošnega
-<code>[H|T]</code> v rekurzivnem primeru?</p>
-<p>Od spodnjih dveh vprašanj prologu prvo deluje, drugo pa ne.</p>
-<p><code>?- insert(d, [d,d,d,d,e,f,g], L).</code></p>
-<p><code>?- insert(d, [a,b,c,d,e,f,g], L).</code></p>
+ 'forcing_result_onto_recursion': '''
+<p>Ne vsiljuj rekurziji kaj naj vrne, prepusti se ji. To je tisti del, ko narediš predpostavko,
+če je ta izpolnjena, potem bo tvoje pravilo delovalo za večji primer.</p>
+<p>Je tvoj rekurzivni klic oblike <code>dup(T, [H,H|...])</code>? S tem vsiljuješ rekurziji
+da mora <emph>vrniti</emph> tudi podvojeno glavo. To moraš narediti ti z (obdelanim) rezultatom, ki ga rezurzija vrne.
+Skratka, [H,H] dodaj izven rekurzivnega klica.</p>
''',
}