Forum: Offtopic Gibt es eine Programmiersprache mit diesem Schleifentyp?


von Klaus W. (mfgkw)


Lesenswert?

Jeder, wie er will.

"Meine Katze mag die Mäuse roh, ich mag sie nicht mal gekocht."

von Josef G. (bome) Benutzerseite


Lesenswert?

Gerade gefunden: Beitrag "Re: for(;;) bedeutung?"

> Genau da haben wir das Problem mit dem redundanten Code sogar
> noch in verschärfter Form. Natürlich kann man diese Schleife
1
>   for(;;) {
2
>     // Codeabschnitt A
3
> 
4
>     if(bedingung)
5
>       break;
6
> 
7
>     // Codeabschnitt B
8
>   }
> so umstellen, dass die Abbruchbedingung am Anfang der Schleife steht:
1
>   // Codeabschnitt A
2
> 
3
>   while(!bedingung) {
4
>     // Codeabschnitt B
5
> 
6
>     // Codeabschnitt A
7
>   }
> Jetzt steht aber der Codeabschnitt A zweimal da.

Die Lösung mit Schleife mit Hineinsprung sähe so aus:
1
*L.JP
2
3
  // Codeabschnitt B
4
5
*HERE
6
7
  // Codeabschnitt A
8
9
*RP.not(bedingung)

Was ist besser?

von Uhu U. (uhu)


Lesenswert?

Josef G. schrieb:
> Was ist besser?

Der C-Code, denn er ist lesbar und ein einziger Befehl macht den Kohl 
nicht fett...

von Klaus W. (mfgkw)


Lesenswert?

1
    while( ( A ), bedingung )
2
    {
3
        B;
4
    }

von Josef G. (bome) Benutzerseite


Lesenswert?

Klaus W. schrieb:
1
>     while( ( A ), bedingung )
2
>     {
3
>         B;
4
>     }

Sieht halt merkwürdig aus, wenn A sehr umfangreich ist.
Beitrag "Re: Gibt es eine Programmiersprache mit diesem Schleifentyp?"

In meiner Lösung erscheinen A und B gleichrangig,
so wie sie es tatsächlich auch sind.

von Klaus W. (mfgkw)


Lesenswert?

Bei deiner Variante sieht es merkwürdig aus, egal ob A kurz oder lang 
ist ehrlich gesagt.
(Abgesehen davon, daß man je nach Anwendung A gleich so formulieren 
kann, daß es Erfolg oder Mißerfolg als Rückgabewert meldet, und dann 
gleich als Bedingung nimmt. zumindest, wenn wenn man Funktionen hat :-))

Aber Geschmackssache!

von Lars R. (lrs)


Lesenswert?

Das sind alles Nebelkerzen. Die relevante Frage lautet:
Warum hat C kein DO-UNTIL (oder "mitten in die Schleife springen")?

Oder: Warum beschränkt man sich beim Beschreiben boolescher Funktionen 
nicht auf nand und nor (immerhin vollständiges System)?

Oder: Warum verwenden wir nur 26 Buchstaben und Worte mit so vielen 
Buchstaben, wären 5000 verschiedene Zeichen nicht effizienter?

Oder: Warum setzt sich durch, was am einfachsten erlernbar, 
kommunizierbar und wiedererkennbar ist?

Oder: Warum wählt man von 2 Varianten nicht ohne irgend einen Vorteil 
freiwillig die umständlichere Variante?


a. for (;;)
b. *L.JP [...] *HERE [...] *RP.not(bedingung)
c. nur ein kyrillisches Zeichen und die 2 Sprungmarken, um das alles zu 
beschreiben
(Man braucht die Bedeutung dieses kyrillischen Zeichens schließlich nur 
einmal lernen, dann ist es intuitiv benutzbar!)

Was ist besser?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Lars R. schrieb:
> Oder: Warum verwenden wir nur 26 Buchstaben

Nun, zumindest hier gibt es real existierende und schon sehr lange 
praktizierte Gegenentwürfe. Ob "unser" Verfahren "besser" ist? Es ist 
primär anders. Und vermutlich wirklich leichter zu erlernen, was aber 
die den Gegenentwurf nutzenden nicht davon abbringt, ihr System 
beizubehalten.

von Lars R. (lrs)


Lesenswert?

Rufus Τ. F. schrieb:
> Lars R. schrieb:
>> Oder: Warum verwenden wir nur 26 Buchstaben
>
> Nun, zumindest hier gibt es real existierende und schon /sehr lange/
> praktizierte Gegenentwürfe. Ob "unser" Verfahren "besser" ist? Es ist
> primär anders. Und vermutlich wirklich leichter zu erlernen,


> was aber
> die den Gegenentwurf nutzenden nicht davon abbringt, ihr System
> beizubehalten.

Im Laufe der Jahrhunderte und in Gegenwart von Alternativen scheinbar 
doch. Auch viele chinesische Zeichen werden im Alltag nicht verwendet.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Lars R. schrieb:
> c. nur ein kyrillisches Zeichen und die 2 Sprungmarken

Hat hier einer „APL“ gerufen? :-)

von Josef G. (bome) Benutzerseite


Lesenswert?

Lars R. schrieb:
> Warum hat C kein DO-UNTIL

Hat es doch, in Gestalt der do-while-Schleife,
wenn auch mit negierter Angabe der Bedingung.


> (oder "mitten in die Schleife springen")?

Die Formulierung soll offenbar die Schleife mit Hineinsprung
als abstruse Idee erscheinen lassen. In Wahrheit ist diese Schleife
aber genau jene Struktur, durch welche while-Schleifen tatsächlich
im compilierten Code meistens realisiert werden.

von Lars R. (lrs)


Lesenswert?

Josef G. schrieb:
> Lars R. schrieb:
>> Warum hat C kein DO-UNTIL
>
> Hat es doch, in Gestalt der do-while-Schleife,
> wenn auch mit negierter Angabe der Bedingung.
>
>
>> (oder "mitten in die Schleife springen")?
>
> Die Formulierung soll offenbar die /Schleife mit Hineinsprung/
> als abstruse Idee erscheinen lassen. In Wahrheit ist diese Schleife
> aber genau jene Struktur, durch welche while-Schleifen tatsächlich
> im compilierten Code meistens realisiert werden.

Ich stimme Dir zu, dass meine Fragen provokativ formuliert waren und Du 
brauchst darauf nicht antworten. Dort wo Du es aber dennoch tust, 
weichst Du jeweils der Frage aus. Die Fragen waren: Warum hat C kein 
DO-UNTIL und warum hat C nicht die Schleife mit Hineinsprung?

Die Fragen hatte ich formuliert als Antwort auf Deine Kritik des 
C-Konstruktes for(;;). Du hattest Deine Konstrukte schließlich mit der 
for- bzw. while-Schleife verglichen und impliziert, dass Deine Variante 
effizienter sei. Und ich habe gefragt, warum C wohl ein solches 
Konstrukt dennoch nicht hat. Darauf nimmst Du einfach keinen Bezug, 
sondern kommst mit etwas anderem.


Edit: Ok, zu Deiner ersten Antwort war meine Frage vielleicht zu 
ungenau:
Warum hat C nicht zusätzlich das DO-UNTIL? Damit ließe sich doch viel 
effizienterer Code erstellen.

: Bearbeitet durch User
von Josef G. (bome) Benutzerseite


Lesenswert?

Lars R. schrieb:
> warum C wohl ein solches Konstrukt dennoch nicht hat.

Das weiss ich nicht.

von Lars R. (lrs)


Lesenswert?

Josef G. schrieb:
> Lars R. schrieb:
>> warum C wohl ein solches Konstrukt dennoch nicht hat.
>
> Das weiss ich nicht.

Meiner Ansicht nach wäre es hilfreich, wenn Du einen C-Experten suchst, 
dessen Antworten Du akzeptierst und ihn dazu befragst.

von Bernd K. (prof7bit)


Lesenswert?

Lars R. schrieb:
> Warum hat C nicht zusätzlich das DO-UNTIL?

Aus dem selben Grund aus dem C auch kein ifnot(), kein whilenot() und 
auch Pascal kein repeat-while hat: weil es redundant und überflüssig 
wäre, denn es gibt bereits den separaten not operator !, damit kann man 
es sich so kombinieren wie man es braucht.

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bernd K. schrieb:
> Aus dem selben Grund aus dem C auch kein ifnot()

Perl kennt ein "unless". ;-)

Macht sich manchmal gut für die Lesbarkeit, weil man in Perl die
Bedingung auch hintenan stellen kann.
1
save_file() unless $readonly;

Aber ich zweifle, dass die Bome-CPU jemals Perl sehen wird …

von Falk B. (falk)


Lesenswert?

@  Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite

>Aber ich zweifle, dass die Bome-CPU jemals Perl sehen wird …

Das wäre ja PERLen vor die Säue ;-)

von Uhu U. (uhu)


Lesenswert?

Jörg W. schrieb:
> Aber ich zweifle, dass die Bome-CPU jemals Perl sehen wird …

Das ist nun in jeder Hinsicht kein Verlust...

Ruby kennt die hinten angestellte Bedingung incl. unless auch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.