Это интересный вопрос.Честно говоря, я не знаю каких-либо встроенных возможностей для этого (хотя необходимость в таких возможностях, безусловно, действительна).
В прошлом мы часто делали для написания служебных функций, называемых "любые "и" все ", которые выглядят так (непроверено, но вы поняли идею):
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;
Это похоже на то, что вы сделали, но использовали понимание массива, а затем инкапсулировали это в функции.Это позволяет вам писать код, подобный следующему:
if any(conditions) then ... else ...;
В идеале эти функции могут быть добавлены во встроенный набор «операторов сокращения» (например, min и max), но языковая группа имеет тенденцию быть несколькоконсервативно вводить такие операторы, потому что они загрязняют пространство имен и создают потенциальные коллизии с существующим кодом.
Обратите внимание, что при использовании предложений when все становится немного сложнее.С предложениями when есть векторная конструкция, например,
when {cond1, cond2, cond3} then
...
end when;
, которая имеет очень полезную семантику, но не на 100% аналогична «any» или «all», как написано выше.Поэтому, если вы намереваетесь использовать вектор условий в предложении when, прочитайте о том, как это обрабатывается (в спецификации), или задайте дополнительный вопрос по этому вопросу, и я могу уточнить подробнее (это несколько выходит за рамкиэтот вопрос).