From 7ddbe59588b3fd34fa9efc39ab56055f925d29ac Mon Sep 17 00:00:00 2001
From: Aleksander Sadikov
Operator ==
je strožji od operatorja =
v smislu, da je za slednjega dovolj,
-da elementa lahko naredi enaka (unifikacija). Morda z uporabo =
naredimo predikat
+da elementa lahko naredi enaka (unifikacija). Morda z uporabo =
narediš predikat
member/2
delujoč tudi v kakšni drugi smeri.
Morda bi bil bolj primeren operator za unifikacijo (=)?
+''', + + 'base_case': '''\ +Si pomislil na robni pogoj? Kaj je najbolj enostaven primer, ko je element v seznamu? +Do katerega elementa najlažje prideš?
''', 'predicate_always_false': '''\ @@ -43,9 +48,20 @@ da elementa lahko naredi enaka (unifikacija). Morda z uporabo=
nar
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 podobnega).
Je morda na delu potencialno neskončna rekurzija? Kako se bo ustavila?
+Morda pa je kriv tudi manjkajoč, neustrezen ali preprosto nekompatibilen (s splošnim primerom) robni pogoj? ''', 'final_hint': '''\ -Member se da uporabljati še za kaj drugega kot samo za iskanje elementa v seznamu.
+Predikat member/2
se da uporabljati še za marsikaj drugega kot samo za preverjanje, če je
+nek element v seznamu! Pravzaprav ga bomo večinoma uporabljali v "obratni" smeri kot "vrni mi nek element
+X
, ki je v seznamu L
. V bistvu si spisal generator elementov iz seznama."
Poskusi prolog vprašati tole:
+?- memb(Coin, [1,2,5,10,20,50,100,200]).
ali pa tole:
+?- memb(Operator, [+, -, *, /]).