Ceci est une question intéressante. Franchement, je ne suis pas au courant des capacités intégrées pour ce faire (bien que le besoin de telles capacités soit certainement valide).
Ce que nous avons souvent fait dans le passé est d'écrire des fonctions utilitaires appelées « tout » et « tous », qui ressemblent à ceci (non testé, mais vous voyez l'idée):
function any
input Boolean vals[:];
output Boolean result;
algorithm
result := max({if i==true then 1 else 0 for i in vals})==1;
end any;
function all
input Boolean vals[:];
output Boolean result;
algorithm
result := min({if i==true then 1 else 0 for i in vals})==1;
end all;
C'est similaire à ce que vous avez fait, mais en utilisant des compréhensions de tableau, puis en encapsulant cela dans les fonctions. Cela vous permet d'écrire du code comme:
if any(conditions) then ... else ...;
Idéalement, ces fonctions pourraient être ajoutées à l'ensemble des « opérateurs de réduction » (comme min et max) intégrée, mais le groupe linguistique a tendance à être un peu conservateur au sujet introduire de tels opérateurs parce qu'ils polluent l'espace de noms et créent des collisions potentielles avec le code existant.
Notez que les choses deviennent un peu compliquées lors de l'utilisation des clauses when. Avec les clauses when, il y a une construction vectorielle, par ex.
when {cond1, cond2, cond3} then
...
end when;
qui a très sémantique utile, mais pas à 100% analogue soit « tout » ou « tout » comme écrit ci-dessus. Donc, si vous avez l'intention d'utiliser un vecteur de conditions dans une clause when, lisez la façon dont cela est traité (dans la spécification) ou posez une question de suivi à ce sujet et je pourrais en dire plus. cette question).
Merveilleux, je suppose que c'est exactement ce dont j'ai besoin! – saroele