From 4463de7f50fd2c737f94485f548b36466899ff30 Mon Sep 17 00:00:00 2001
From: Aleksander Sadikov Prazen seznam ni prav pretirano dolg, če pa ni prazen, pa ima glavo in rep. Če je rep (seznam brez ene glave) dolg Če je rep (seznam brez ene glave) dolg Če vzamem stran eno glavo, rekurzija mi reši (za ena) manjši problem in če rezultatu rekurzije prištejem 1,
potem sem dobil ravno dolžino celotnega seznama. Vsota elementov praznega seznama ni prav velika. Sicer pa seštevamo, element po element, lepo rekurzivno. Če je vsota elementov v repu (seznamu brez glave Če vzamem stran eno glavo, rekurzija mi reši (za ena) manjši problem in če rezultatu rekurzije prištejem vrednost
+prej odvzete glave, potem sem dobil ravno dolžino celotnega seznama. 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? Koliko je vsota elementov v praznem seznamu?NT
, potem je celoten seznam dolg NT + 1
.LenT
, potem je celoten seznam dolg LenT + 1
.H
) enaka SumT
, potem je vsota elementov
+celotnega seznama enaka SumT + H
.==
je strožji od operatorja =
v smislu, da je za slednjega dovolj,
@@ -22,8 +34,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': '''\
@@ -44,26 +55,38 @@ da je X
hkrati starš in sestra od Y
ali kaj podobno z
''',
'arbitrary_base_case': '''\
-arbitrary_base_case
+Koliko je vsota elementov praznega seznama? Podaj konkretno številko!
''', 'args_not_instantiated': '''\ -args_not_instantiated
+Napaka, ki si jo dobil od prologa, pomeni, da ob uporabi aritmetike niso podane vse vrednosti spremenljivk. +Pri aritmetiki je vrstni red ciljev (konjunktov) žal pomemben.
+Morda poskusiš pomakniti aritmetiko bolj na konec?
''', '=_instead_of_is': '''\ -=_instead_of_is
+Si morda uporabil =
namesto is
? Operator =
je namenjen prilagajanju
+(unifikaciji) in poskusi pustiti obe strani čimbolj nespremenjeni, medtem ko operator is
izvede
+dejanski aritmetični izračun izraza na svoji desni strani ter ga šele potem poskusi prilagoditi (!)
+svoji levi strani.
+1_instead_of_+H
+Kaj si res prištel ena namesto vrednosti elementa (glave)? Kopiranje od prejšnje naloge, morda? ;)
''', - '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 len(T, LenT + H)
? S tem vsiljuješ rekurziji
+da mora
same_var_on_both_sides_of_is
+Si morda zapisal pogoj oblike N is N + H
? Predpostavi, da je N
recimo enak 3.
+S tem si v resnici rekel, da mora 3 biti enako kot 3+H. Prolog je logičen jezik in zato z največjim veseljem
+reče ne (seveda če H ni enako nič, he he)! Uporabi novo spremenljivko, za odvečne bo tako ali tako
+poskrbel "garbage collector".