From 3ed1137118bf719eab1d3fc1d230441057cdf854 Mon Sep 17 00:00:00 2001 From: Aleksander Sadikov Date: Mon, 14 Mar 2016 17:22:11 +0100 Subject: Basics for permute/2 added. --- prolog/problems/lists/divide_3/common.py | 2 +- prolog/problems/lists/divide_3/sl.py | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) (limited to 'prolog/problems/lists/divide_3') diff --git a/prolog/problems/lists/divide_3/common.py b/prolog/problems/lists/divide_3/common.py index 2d93c4c..ff42d34 100644 --- a/prolog/problems/lists/divide_3/common.py +++ b/prolog/problems/lists/divide_3/common.py @@ -105,7 +105,7 @@ def hint(code, aux_code): return [{'id': 'second_base_case_missing'}] # missing/failed base case - if not prolog.engine.ask_truthTO(engine_id, 'divide([], [], [])'): + if not prolog.engine.ask_truth(engine_id, 'divide([], [], [])'): return [{'id': 'base_case'}] # # target predicate seems to always be false diff --git a/prolog/problems/lists/divide_3/sl.py b/prolog/problems/lists/divide_3/sl.py index 3a9e5c2..bec9282 100644 --- a/prolog/problems/lists/divide_3/sl.py +++ b/prolog/problems/lists/divide_3/sl.py @@ -46,12 +46,14 @@ implicitno že kar v argumentih predikata (glavi stavka).

Kako je lahko rezultat delitve seznama poljuben seznam oz. karkoli?

Če je tvoj robni pogoj v stilu divide([], _, _) ali divide([X], [X|_], ...), ga še enkrat premisli: kaj je rezultat delitve, kaj vračaš? Robni pogoj je vedno dokončno specificirana -rešitev, tu načeloma ni neznank (_ ali neinicializiranih spremenljivk) v tem kar se vrača.

+rešitev, tu načeloma ni neznank (_ ali spremenljivk brez prirejenih vrednosti) v tem kar se vrača.

''', 'second_base_case_missing': '''\

Rekurzija se ne konča vedno uspešno. Sta morda dva različna primera kako se lahko izteče? Saj veš, -sodo in liho ;) Je morda potreben še kakšen robni pogoj?

+sodo in liho ;) Je morda potreben še kakšen robni pogoj? Poskusi naslednja klica, eden bo uspešen, drugi pa ne:

+

?- divide([a,b,c], L1, L2).

+

?- divide([a,b,c,d], L1, L2).

''', 'unsuccessful_conc_use': '''\ @@ -63,8 +65,8 @@ težko boš prišel do posameznih elementov. Poskusi raje brez.

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.

Je tvoj rekurzivni klic oblike divide(T, [H1|...], [H2|...])? S tem vsiljuješ rekurziji -da mora vrniti tudi obe glavi, ki jih sploh ne pozna, ker si jih ti ravnokar vzel stran! To moraš -narediti ti z (obdelanimi) rezultati, ki jih rezurzija vrne. Skratka, elementa H1 in H2 +da mora vrniti tudi obe glavi, ki jih sploh ne pozna, ker si jih ravnokar vzel stran! To moraš +narediti ti z rezultati, ki jih rekurzija vrne. Skratka, elementa H1 in H2 dodaj izven rekurzivnega klica.

''', -- cgit v1.2.1