While en for lus
-
- Berichten: 228
While en for lus
Kan iedere while lus ook geschreven woorden als een for lus? (java)
- Berichten: 6.905
Re: While en for lus
Neen. Volgens mij kan je steeds een while-lus verzinnen die niet als een for kan geschreven worden.
Een oneindige lus lijkt mij met een for niet mogelijk.
Een oneindige lus lijkt mij met een for niet mogelijk.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.
- Lorentziaan
- Berichten: 5.079
Re: While en for lus
Elke for-lus kan als while lus geschreven worden.
Elke while-lus waarbij het aantal herhalingen van te voren berekend kan worden is te vervangen door een for-lus. Het mag niet altijd even efficient zijn maar het is meestal wel mogelijk.
Waar exact de grens ligt wordt bepaald door de semantiek van je for-lus in je taal. Zo kan het bijvoorbeeld een oneindige lus toestaan of niet.
zie ook dit dictaat
Elke while-lus waarbij het aantal herhalingen van te voren berekend kan worden is te vervangen door een for-lus. Het mag niet altijd even efficient zijn maar het is meestal wel mogelijk.
Waar exact de grens ligt wordt bepaald door de semantiek van je for-lus in je taal. Zo kan het bijvoorbeeld een oneindige lus toestaan of niet.
zie ook dit dictaat
Any sufficiently analyzed magic is indistinguishable from science.
Any sufficiently advanced technology is indistinguishable from magic.
There is no theory of protecting content other than keeping secrets Steve Jobs
Any sufficiently advanced technology is indistinguishable from magic.
There is no theory of protecting content other than keeping secrets Steve Jobs
- Berichten: 4.810
Re: While en for lus
Jawel kan wel hoor:jhnbk schreef:Neen. Volgens mij kan je steeds een while-lus verzinnen die niet als een for kan geschreven worden.
Een oneindige lus lijkt mij met een for niet mogelijk.
for(int i=0;true;i++) {}
Deze zal dus oneindig doorgaan.
In c++ lukt deze ook:
for(; {}
Maar ik denk dat in java dit niet kan gebruikt worden.
- Berichten: 6.905
Re: While en for lus
euhm, een oneindige is dus toch mogelijk. Welke while zou dan niet als een for geschreven kunnen worden?
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.
- Lorentziaan
- Berichten: 5.079
Re: While en for lus
Stel je hebt een while waarvan je niet weet of deze eindig is of oneindig.
Hoe zou je die willen implementeren als een for?
Als de semantiek van je taal toestaat dat je een oneindige for kunt breken dan zou er volgens mij geen verschil zijn.
Maar wat is op dat moment de semantische betekenis van for? Zou je dat niet beter iets anders kunnen noemen, zoals while of repeat-until?
Daarnaast kun je een vraag zetten bij de nut van een for, vooral in een taal waarin functies of objecten first-class elementen zijn is een for een beetje ridicuul. Meestal kan het veel beter vervangen worden door een map/fold of Iterator's. Vooral omdat de semantiek dan duidelijker is zodat de compiler het beter kan compileren, bijvoorbeeld door het in parallel te verwerken waar mogelijk. Informatie die vaak niet beschikbaar of slechts moeilijk af te leiden is uit een for-loop.
Het zijn allemaal verschillende vormen van iteratie. (In bijvoorbeeld Scheme is zelfs een recursieve functie met een tail-call equivalent met iteratie).
Hoe zou je die willen implementeren als een for?
Als de semantiek van je taal toestaat dat je een oneindige for kunt breken dan zou er volgens mij geen verschil zijn.
Maar wat is op dat moment de semantische betekenis van for? Zou je dat niet beter iets anders kunnen noemen, zoals while of repeat-until?
Daarnaast kun je een vraag zetten bij de nut van een for, vooral in een taal waarin functies of objecten first-class elementen zijn is een for een beetje ridicuul. Meestal kan het veel beter vervangen worden door een map/fold of Iterator's. Vooral omdat de semantiek dan duidelijker is zodat de compiler het beter kan compileren, bijvoorbeeld door het in parallel te verwerken waar mogelijk. Informatie die vaak niet beschikbaar of slechts moeilijk af te leiden is uit een for-loop.
Het zijn allemaal verschillende vormen van iteratie. (In bijvoorbeeld Scheme is zelfs een recursieve functie met een tail-call equivalent met iteratie).
Any sufficiently analyzed magic is indistinguishable from science.
Any sufficiently advanced technology is indistinguishable from magic.
There is no theory of protecting content other than keeping secrets Steve Jobs
Any sufficiently advanced technology is indistinguishable from magic.
There is no theory of protecting content other than keeping secrets Steve Jobs
- Berichten: 4.810
Re: While en for lus
Je hebt altijd wel ergens een conditie die dus moet voldaan zijn om te stoppen met itereren die je kan opgeven.qrnlk schreef:Stel je hebt een while waarvan je niet weet of deze eindig is of oneindig.
Hoe zou je die willen implementeren als een for?
Ik denk bv aan volgende code:
Code: Selecteer alles
for(int i=0;i<5;i=(i+1)%5) {
if(conditie) break;
}
- Berichten: 829
Re: While en for lus
twee dingen:
1) Waarom deze vraag, als je een while-lus nodig hebt schrijf je gewoon een while, en voor een for, een for. Toegegeven in theorie is dit natuurlijk misschien intressant, maar ik denk niet dat je er in de praktijk veel mee opschiet. Bovendien wil ik nog even zeggen dat dit op lage programmeertalen (waarin alles uiteindelijk in wordt omgezet totaal geen effect heeft)
2) Volgens mij lijkt een for(int i = 0; true; i++) geen handig alternatief, wat als bijvoorbeeld i in overflow gaat, ik ken te weinig van java om daar een passend antwoord op te geven, maar op als de compiler het een beetje verkeert naar de lage programmeer taal opzet kan ik je verzekeren dat er vuurwerk bij te pas komt (uiteraard brand je PC niet plat, ik bedoel dat je systeem een error kan geven, afhankelijk van hoe het in de lage programmeertaal is geschreven deze al dan niet fatal kan zijn. In C# en in andere .Net talen wordt for(; wel degelijk "geslikt" dus gok ik erop dat java dat ook doet (C# is gebaseerd op Java)
1) Waarom deze vraag, als je een while-lus nodig hebt schrijf je gewoon een while, en voor een for, een for. Toegegeven in theorie is dit natuurlijk misschien intressant, maar ik denk niet dat je er in de praktijk veel mee opschiet. Bovendien wil ik nog even zeggen dat dit op lage programmeertalen (waarin alles uiteindelijk in wordt omgezet totaal geen effect heeft)
2) Volgens mij lijkt een for(int i = 0; true; i++) geen handig alternatief, wat als bijvoorbeeld i in overflow gaat, ik ken te weinig van java om daar een passend antwoord op te geven, maar op als de compiler het een beetje verkeert naar de lage programmeer taal opzet kan ik je verzekeren dat er vuurwerk bij te pas komt (uiteraard brand je PC niet plat, ik bedoel dat je systeem een error kan geven, afhankelijk van hoe het in de lage programmeertaal is geschreven deze al dan niet fatal kan zijn. In C# en in andere .Net talen wordt for(; wel degelijk "geslikt" dus gok ik erop dat java dat ook doet (C# is gebaseerd op Java)
"Als je niet leeft zoals je denkt, zul je snel gaan denken zoals je leeft."
--Vladimir Lenin-- (Владимир Ильич Ульянов)
--Vladimir Lenin-- (Владимир Ильич Ульянов)
- Berichten: 1.623
Re: While en for lus
for(int i = 0; true, i = i+0) gaat niet in overflow.2) Volgens mij lijkt een for(int i = 0; true; i++) geen handig alternatief, wat als bijvoorbeeld i in overflow gaat,
Beter kaal als geen haar want een kip snurkt
- Lorentziaan
- Berichten: 5.079
Re: While en for lus
Je kunt natuurlijk ook een tail-call-recursieve functie gebruiken;) Als je compiler aan tail-call-optimalisatie doet zou dat vrijwel dezelfde machine code moeten opleveren als een for-lus. [edit: had ik blijkbaar al opgemerkt]
Dat zou wellicht intersant zijn om eens te onderzoeken: Welke machine code genereert de compiler bij een while (true), een for(; en een tall-call-recursieve functie?
Dat zou wellicht intersant zijn om eens te onderzoeken: Welke machine code genereert de compiler bij een while (true), een for(; en een tall-call-recursieve functie?
Any sufficiently analyzed magic is indistinguishable from science.
Any sufficiently advanced technology is indistinguishable from magic.
There is no theory of protecting content other than keeping secrets Steve Jobs
Any sufficiently advanced technology is indistinguishable from magic.
There is no theory of protecting content other than keeping secrets Steve Jobs
- Berichten: 829
Re: While en for lus
for(int i = 0; true, i = i+0) gaat niet in overflow.
zeer juist, maar dan nog vraak ik me af waarom er een iteratie moet staan, toegegeven, de huidige rekenkracht zorgt er wel voor dat je het verschil niet merkt, maar als je laat ons zeggen 100.000.000.000 keer door die for-lus gaat, is het volgens mij wel normaal dat je op den duur iets meer tijd (laat ons zeggen 0,2 seconden) verloren hebt met rekenen.
Je zou die iteratie dan beter kunnen gebruiken voor een variabele in je (gemodificeerde) for-lus
"Als je niet leeft zoals je denkt, zul je snel gaan denken zoals je leeft."
--Vladimir Lenin-- (Владимир Ильич Ульянов)
--Vladimir Lenin-- (Владимир Ильич Ульянов)
-
- Berichten: 7.068
Re: While en for lus
Java gaat gewoon van het grootst mogelijke getal naar het kleinst mogelijke getal.2) Volgens mij lijkt een for(int i = 0; true; i++) geen handig alternatief, wat als bijvoorbeeld i in overflow gaat, ik ken te weinig van java om daar een passend antwoord op te geven
Dat krijg je vroeg of laat met je 'functionele talen'-verheerlijking.[edit: icon_redface.gif had ik blijkbaar al opgemerkt]
- Berichten: 1.623
Re: While en for lus
Wat is een tail-call-recursieve functie? Kun je daar een stukje code bij geven als voorbeeld?Je kunt natuurlijk ook een tail-call-recursieve functie gebruiken
Beter kaal als geen haar want een kip snurkt
-
- Berichten: 7.068
Re: While en for lus
Wiki is je vriend.Wat is een tail-call-recursieve functie? Kun je daar een stukje code bij geven als voorbeeld?
- Lorentziaan
- Berichten: 5.079
Re: While en for lus
Ik kom er net achter dat het in het Nederlands staartrecursie heet.Wat is een tail-call-recursieve functie? Kun je daar een stukje code bij geven als voorbeeld?
Zie Staartrecursie
Any sufficiently analyzed magic is indistinguishable from science.
Any sufficiently advanced technology is indistinguishable from magic.
There is no theory of protecting content other than keeping secrets Steve Jobs
Any sufficiently advanced technology is indistinguishable from magic.
There is no theory of protecting content other than keeping secrets Steve Jobs