PDA

View Full Version : [Frage] 9.3


fuxi17
28-05-2004, 12:57
(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?

flosko
31-05-2004, 00:49
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

fuxi17
04-06-2004, 10:20
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

templar
05-06-2004, 18:49
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 ...

Erendis
06-06-2004, 16:09
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