From c625d5f23505d7400e93e82399574d46881b261a Mon Sep 17 00:00:00 2001
From: Aleksander Sadikov To je ena najlepših in najbolj poučnih nalog. Klasična rekurzija! Problem poskusi zmanjšati. Seveda, prevedi na
+krajši seznam. Seznamu odvzamem glavo, rekurzija mi obrne rep in vse, kar moram na koncu narediti jaz je, da glavo vstavim nazaj
+v obrnjen rep na pravo mesto. Če je podani seznam Operator Si pomislil na robni pogoj? Kaj je najbolj enostaven primer, ko je element v seznamu?
-Do katerega elementa najlažje prideš? Si pomislil na robni pogoj? Kateri seznam je trivialno obrniti?L
sestavljen iz glave H
in repa T
+in če predpostavim, da rekurzija obrne T
v obrnjen rep RT
in če RT
na konec
+dodam H
, potem je rezultat obrnjen seznam L
.==
je strožji od operatorja =
v smislu, da je za slednjega dovolj,
@@ -24,8 +38,7 @@ implicitno že kar v argumentih predikata (glavi stavka).
Č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?
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
ali kaj podobno zlobnega).
N
enako kot N + 1
ali kaj podobno logično zlobnega).
''',
'timeout': '''\
@@ -46,30 +59,38 @@ da je X
hkrati starš in sestra od Y
ali kaj podobno z
''',
'base_case_at_len1': '''\
-base_case_at_len1
+Ta robni pogoj je seveda povsem smiseln, a ga vseeno popravi tako, da bo deloval tudi za prazen seznam. +Vendar ne imej dveh robnih pogojev, ker bo to podvajalo rešitve./p> ''', 'arbitrary_base_case': '''\ -
arbitrary_base_case
+Kaj je rezultat obračanja praznega seznama? Gotovo ne karkoli (spremenljivka brez določene vrednosti)!
''', - 'forcing_result_onto_recursion': '''\ -forcing_result_onto_recursion
+ 'forcing_result_onto_recursion': ''' +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 rev(T, [RevTail|H])
? S tem vsiljuješ rekurziji
+da mora H
vstavi izven rekurzivnega klica.
using_other_solutions
+Od predikatov last/2
, shiftleft/2
ali shiftright/2
tukaj ne bo veliko
+pomoči. Poskusi raje brez, bo lažje.
insertion_at_beginning
+Vstavljaš morda glavo nazaj na začetek obrnjenega repa? To ni pravo mesto, ker s tem samo sestaviš nazaj +enak seznam kot na začetku.
''', 'invalid_insert_at_end': '''\ -invalid_insert_at_end
+Spomni se, rep seznama je vedno seznam! Kako vstaviš element na zadnje mesto?
''', 'conc_arg_not_list': '''\ -conc_arg_not_list
+Vsi trije argumenti predikata conc/3
morajo biti seznami. Si prepričan,
+da si ga tako uporabil?