@ il commento di oenone menziona che GNAT rifiuta x AND THEN y AND z
, ma non spiega perché. È vero, in un certo senso, che lo and
e lo and then
hanno la stessa precedenza, ma non è tutta la storia.
La grammatica per un'espressione è:
expression ::=
relation {and relation} | relation {and then relation}
| relation {or relation} | relation {or else relation}
| relation {xor relation}
dove { FOO }
indica zero o più occorrenze di FOO
.
Questa grammatica è progettata specificamente per consentire a uno di questi operatori o moduli di controllo di essere concatenati in una singola espressione (X and Y and Z
, A and then B and then C
), ma di vietare il loro mixaggio. Quindi l'espressione nella domanda, x AND THEN y AND z
, è illegale e la questione di cosa significa non si pone neppure. Il punto di questa regola è proprio quello di evitare la confusione in casi come questo.
Hai solo bisogno di scrivere (X and then Y) and Z
o X and then (Y and Z)
, a seconda di ciò che si vuole fare.
Lo stesso vale per la miscelazione e and
or
:
X and Y and Z -- legal
X and Y or Z -- ILLEGAL
(X and Y) or Z -- legal
X and (Y or Z) -- legal
fonte
2011-08-02 15:47:39
GNAT rifiuterà compilare il primo esempio di messaggio di errore "operatori logici misti nell'espressione". – oenone