-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
"do / else" proposal #342
Comments
Just to be clear, the above is equivalent to the below? condition = .false.
do i = 1, 10
...
if (condition) exit
end do
if (i > 10) then
! This block only executes if the do loop doesn't exit.
error stop "Condition not met"
end if |
Yes. I updated the above description with an example. (I don't like using loop variables after the loop, but that's a separate issue: is it even specified by the standard?) |
Yes, although it's not immediately obvious. From 11.1.7.4.3 The execution cycle
and from 11.1.7.4.5 Loop termination
So if a do loop completes all its iteration, the standard says it has a value > the ending value. |
@everythingfunctional thanks for the clarification! |
Looks like syntactic vinegar for the existing and less mysterious
|
Try fully sketch this out, I think the following example would also be included.
Not exactly sure how the below case should be handled. Python explicitly ties it to a break statement, so perhaps it doen't execute.
|
I think current approaches to catch failures can be lumped into two general groups, along with what I believe are limitations of those approaches. I believe these limitations would mostly be addressed with a do / else approach. GO TO / Exit Block: Use either a GO TO or exit block statement to jump forward and skip the error condition code. This is likely the most common approach. The downsides is jump statements can become difficult to follow and breaks up the flow of the code. Check loop variable after loop completes: It's not obvious at first glance that the if statement is conditionally executed based on the loop exit state. And since the if block isn't explicitly tied to the do loop, the do conditional statement can get out of sync with the if conditional statement if the programmer isn't careful. For an interesting discussion of this feature in Python, see below link . |
https://fortran-lang.discourse.group/t/for-else-or-do-else-in-fortran/8696
Example:
which would be equivalent to:
Similar to Python's "for else": https://docs.python.org/3/tutorial/controlflow.html#else-clauses-on-loops
The text was updated successfully, but these errors were encountered: