The below, does not address the pre-eval nature of "evaluate. This is because it is not part of the quotes to which I answer. Also keeping in mind, that for the pre-eval:
- there are other means (the may be better or worse...) => discussed in other posts on this thread
- they only matter/apply where side-effects are in place. (as for the readability of repeating those parts of the expression, see previous posts on "as" alias. We do disagree, but it appears a matter of taste. Also it has a point in the light of my "squeeze" reply in a previous post)
So when replying to my answers, keep in mind that each answer only deals with a certain part of the "evaluate". Which is the part that I got from reading the text I quoted from you. Apologies if I misread you on any of them.
that intent can be broken, e.g. by nesting "evaluates" (bad style or not, does not matter, it can be broken.
The intent cannot be broken. An EVALUATE statement is an n-dimensional table. EVALUATE within EVALUATE is used in the somewhat rare case that the columns of a table are also tables.
It can.
1) (actually does not conflict with the intent) => nested exists for both "if" and "evaluate".
1a) (off topic) "else if" would be more clear towards its intent if it was "elseif" (one word). In fact "elseif" represents the same intent. (only it does not on the top line).
(again either and any can be nested)
2) breaking intent
EVALUATE TRUE ALSO A > B ALSO X = Z // intent THREE conditions
WHEN <expression 1> ALSO TRUE ALSO TRUE // has THREE conditons
WHEN ( (<expression 2>) and (<expression 3>) ) ALSO TRUE ALSO FALSE // has FOUR conditions => broken intent
Yes very bad style. But again
"evaluate" does not prevent bad style
"if" does not enforce good style
same thing, just different wording.
Remains the question how big a need there is to express such intent....
The existence of constructs such as "for", "repeat/until", "case", etc makes it clear that there is plenty of value of making intent clear since all of them can be built using "if" and "goto".
Off topic, this one line is not part of my argument: "whitespace" and "brainfuck" are also turing complete.

The difference of "if goto" and "<any loop construct>" is a bit bigger... But that aside, your argument would then just be reduced to having 3 different loop statements.
Are they needed? Topic for a discussion of its own.
This particular quote, seems to me to get away from the question, if or what value there is to "evaluate".It seems to simply say, if claims of it not being valuable (or it being redundant) were true, then it could/should still be included because (of the claim) that the same was done for "several loops".
I think there is no point of arguing, what should or could be if that
claim about evaluate being redundant were true.
That leads to the kind of "two wrong, don't make one right" issue.
(While IMHO not successful)... You are presenting your arguments against the "redundant" claim in the rest of your post. So lets keep the arguing to those.
2)
In either case, IMHO it only matters (if at all) from a certain size/complexity upwards. For small problems both solutions are adequate.
Expressing an n-dimensional structure using a chain of binary choice constructs (if) leaves a great deal to be desired.
If n = 1 or n =2 then => I see no problem.
If n =.... well, (and we will not agree on the exact "n" at which "else if" becomes harder to read, but really all that matters is that there is some "n")....
I already expressed that for an "n" that big, I find "evaluate" equally hard to read (if not harder, due to the lack of "as" alias / but again I know on that we disagree).
So yes "else if" becomes hard to read. But "evaluate" does not solve it (for me)
=> that said: read my previous reply about "squeeze" on one screen.
Yes I would probably myself use it for that. (If I find myself to lazy to go for a better solution). But that is not "readable". "squeezing" is far from readable. Even if "squeezed" on one screen may in this very particular case be a bit more readable than an "elseif" that does not fit the screen.
In the end, it comes down to
- your claim (for which no evidence exists, other that "its in the book"): "this is a common scenario"
- and my claim (equally unproven): a) "I have not experienced the need myself" b) "if it does happen, it is an indicator for bad design, and should be solved refactoring"
NOTE to the above (keep together when quoting): without your "it is commonly needed" claim, what is the point. For some rare edge cases, there is no need to introduce it.
That still holds true, even if there are already other constructs (maybe loops) present, that equally have no other standing, than some rare edge cases, or even less. (two wrong, don't make one right)
However, if a problem becomes so complex that you need to replace "elseif" with a special "elseif" replacement just to keep it readable, then my experience says its a design problem, and you should refactor or change the overall approach.
It's not a matter of complexity. It's a matter of matching the right tool for the right job. If statements to implement multi branch logical tables are akin to using a screwdriver as a hammer. It can be done that way but, it's far from being optimal or elegant. It's just a kludge.
"multi branch logical tables" implies some complexity.
Yes a table can have only ONE cell. But that would not need "evaluate", or would it?
See my above answer to when "n" becomes bigger.
As a matter of completeness, about your "hammer" analogy: I think the difference between "else if" and "evaluate" is at best using a 150gram hammer, where a 100gram hammer would have been good enough. Most people would not even know the exact weight of the hammer they need. Yes, there is a need for hammers of different weight, a sledge hammer is no good if you want to hang a small picture, but the diff between a 100g and 150g hammer does in 99% of all cases not matter, not even for people who know how to calculate the exact weight needed.
Concluding that back to "evaluate", maybe it matters in 1% (100 - 99) of all cases ("1" is a randomly chosen figure, standing for "a (very) low percentage", which is based on my personal experience of over 30 years of programming of my own, and in teams with others.
"the experts decided" or more commonly "It is in the book".
It's not just the experts.
My comment was only directed the following statement of yours (from another post in this topic)
Before you say that is not the case, the folks who design the COBOL language obviously don't agree, if they did, they would not have added it to the 1985 standard.
I assume you give those people some expert status? And you used their decision (putting it in the standard aka "in the book") as argument.
Whereas I say, based on this, there is a point to look at it, and see if it fits into the different scenario of Pascal. (I.e., it being in the standard is in itself not an argument)
As well, as:
- Was there decision good to begin with? (Could be....)
- Is it still good, or have other techniques evolved to replace it (other techniques here does
not refer to "else if" / see references do design/refactor)
No expert can foresee all future use (and abuse) cases.
Programmer deficiencies cannot be used as an argument not to implement constructs that are useful.
Bit out of context. I never said features should be avoided, because any feature can be abused. Then there would be no programming at all.
I said, that just because someone (expert or not) at sometime found that something is useful for specific cases...
Then that does not mean, that this will apply forever.
Also cases may not always be the same, and even in exactly identical cases something better may have emerged to replace it. (We are in the year 2019, not 1985).
As for details on something better (as that question may now raise): As I have not myself experienced the need for the "original solution", I never had to look for this "something better".
That does not mean it does not exist....
It has already been clearly established that the EVALUATE statement is an excellent fit to deal with multi branch conditionals.
Has it? Then why is there still a discussion?
You have always claimed that.
I have agreed that some elements of it, are of interest.
At the same time, I have also questioned if situations where their "interesting" property might be applied, actually arise (commonly, or at least with some regularity (I am aware you claim they do)).
And also, if when they arise, they arise in a valid situation.
Where they do arise in case of bad design, I think it should not be used as argument. It does not sound good to say "we need it, so we can get away with bad design"
=> I know, you have not said that. I do not imply you have.
=> I merely underline, that out of the IMHO very few cases, which may seemingly need "evaluate" we have to filter out any cases, that merely exists because something else (design or otherwise) went wrong before.
This is a bit theoretical. To further that point entire projects, which currently contain "evaluate" would need to be analysed. A task for which I do not have the time.
Still the assumption, that such situations may exists remains valid. The extend to which this is the case is entirely open. (As are any other figures about what happens how frequently)