View Full Version : [Frage] 9.3
(AL5) Ist B E P0(D) und A E AL(D), dann ist repeat A until B E AL
(MAL5) MAL(I,repeat A until B) =
= MAL(MAL(I,A),repeat A until B) wenn MPL(I,B)=f
= I wenn MPL(I,B)=t
Erdös-Index 97
29-05-2004, 17:54
scheint so zu stimmen.
Mein vorschlag zur semantik wäre:
(MAL5) MAL(I,repeat A until B) = MAL(MAL(I,A), while !B do A)
soweit ich weiß haben repeat und while schleifen ja nur den unterschied, dass die repeatschleife mindestens einmal durchlaufen wird, ansonsten sind sie ident ;).
eure meinung dazu?
eure meinung dazu?dann muss aber auch noch die schleifenbedingung negiert werden, da
while(!B) do a; ... solange B nicht erfüllt wiederhole a
repeat a until(B) ... wiederhole a, bis B erfüllt
d.h.
repeat a until(B) ist imho das gleiche wie a while(!B) do a
Erdös-Index 97
31-05-2004, 13:52
stimmt, hab ich nicht bedacht
danke
zwutschkerl
03-06-2004, 16:08
beim repeat wird die schleife mindestens 1 mal durchlaufen, auch wenn die Bedingung bereits zutrifft.
Wenn du das mit einem einzigen while schreibst, dann nicht.
_logonoff_
03-06-2004, 19:35
ich denke auch, dass der witz an der sache ist, dass bei einer repeat-until-schleife a ja zumindest einmal ausgeführt wird. ich hätte das folgendermaßen gelöst:
M_AL(I, repeat α until B) =
M_AL(M_AL(I, α), [repeat α until B) für M_PL(I', B)* = false])
, [I' für M_PL(I', B) = true])
*I' = M_AL(I, α)
hier wird α auf jedenfall zumindest einmal ausgeführt und dann die bedingung überprüft
ich denke auch, dass der witz an der sache ist, dass bei einer repeat-until-schleife a ja zumindest einmal ausgeführt wird. ich hätte das folgendermaßen gelöst:
M_AL(I, repeat ? until B) =
M_AL(I, ?), M_AL(I, repeat ? until B) für M_PL(I, B) = false
, I für M_PL(I, B) = true
hier wird ? auf jedenfall zumindest einmal ausgeführt und dann die bedingung überprüft
Da muss ich dir vollkommen recht geben. Das hab ich nicht bedacht.
thx
winterspeck
04-06-2004, 23:04
Ich glaub Ihr habt nicht ganz recht. Das mit mindestens einmal durchlaufen stimmt schon, aber wie ihr es formuliert habt glaub ich passt icht ganz:
Ich würds so machen
Mal(I,repeat A until B) =
Mal(Mal(I, A), repeat A until B) für Mpl (I´,B) = false, I´ = Mal(I, A)
Mal(I, A) für Mpl (I´,B) = true, I´ = Mal(I, A)
Der Fehler bei euch war das Ihr die Bedinung für B mit dem alten I checkt.
Bei der repeat Schleife wird jedoch die Bedinung ganz am Schluss überprüft, nachdem Mal(I, A) durchgeführt würde und da ändert sich das I
Die einfachere Variante mit while-Schleife geht denk ich so:
M_AL( I , begin a; while !B do a end)
ein_stein2000
05-06-2004, 21:35
Ich glaub Ihr habt nicht ganz recht. Das mit mindestens einmal durchlaufen stimmt schon, aber wie ihr es formuliert habt glaub ich passt icht ganz:
Ich würds so machen
Mal(I,repeat A until B) =
Mal(Mal(I, A), repeat A until B) für Mpl (I´,B) = false, I´ = Mal(I, A)
Mal(I, A) für Mpl (I´,B) = true, I´ = Mal(I, A)
Der Fehler bei euch war das Ihr die Bedinung für B mit dem alten I checkt.
Bei der repeat Schleife wird jedoch die Bedinung ganz am Schluss überprüft, nachdem Mal(I, A) durchgeführt würde und da ändert sich das I
jo i glaub du hast wirklich recht ...
warum wird zwischen Mal und Mpl gewechselt? Kann ich das ganze nihct in einer zeile aufschreiben, so wie templar?
ich muss ja das a solange wiederholen, bis es gleich dem B ist, wie kann man das denn sonst aufschreiben?
_logonoff_
06-06-2004, 18:00
Der Fehler bei euch war das Ihr die Bedinung für B mit dem alten I checkt.
danke für den hinweis, habs schon editiert
vBulletin® v3.7.1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.