
I hadn't interpreted the "reminding of Knuth" that way. I wouldn't count break as a goto -- what makes goto especially nasty is that the destination isn't indicated by the structure of the source; it could be just anywhere. Break is slightly more structured.
Maybe you might need to take a look at this :-) http://kerneltrap.org/node/553/2131 Linus does get a little serious about Pascal. But I feel that gotos, like pointers is a tool that makes programming easy (in some context, like modeling a simple FSA). So, its better that we take them in a "Use them with Caution" attitude! Okay, "pointers" may not be a nice thing to discuss here :-) I have been a little sluggish in my replies to mails that came here. I forgot to click "Reply All". These are smoe of the missed replies ... ========================================================
But it IS possible. Just add a boolean flag:
done = False while E and not(done) do...
I'll let you work out the rest. Unless I am missing something here... are you not allowed to introduce extra variables? It's a strange thing for your professor to ask, since under reasonable assumptions, anything that is computable can be done only using if and while. goto (which is essentially what break is) is never necessary.
Ah, yes, it is possible in this case, but you have used an extra variable. It is okay, but our professor doesnt want to put emphasis on Computability here (or maybe I dont realize it), but the point is: Are such programming constructs really necessary in a programming language? i.e. Is Breakl, goto, falling through switch/case statements, necessary in a language? This also brings another point. What if there are N loops like this, and there is no break statement available in your language? You would have to use N conditional variables, and would make mainting the code a horrible thing to do. ========================================================
Possibly, you are not allowed to change the sequence of machine operations at all. See, if you change "while(A){B}" to "if(A){B};while(A){B}", the sequence is exactly the same; but it's not possible in this case.
Changing the sequence is fine as long as the execution of one doesnt affect another. So, he is trying to bring the idea of functional programming here, to avoid side-effects.
It reminds me of a paper by Knuth, where he states that "goto" statement is necessary; don't remember the title, however.
Thanks for the info! I willl check it out soon! ======================================================== ~Vimal