Массивы в Ada могут быть объявлены с любыми границами, которые желает кодер, даже при вызове подпрограммы (возможно, при чтении нужного размера от пользователя во время выполнения). Границы могут быть получены кодером с использованием таких атрибутов, как 'first
, 'last
и 'length
. По соглашению массивы в Аде обычно не используют значения-терминаторы.
К чему все это приводит, так это к тому, что обычно каждый элемент в массиве Ada содержит допустимое значение. Если есть некоторые причины, по которым это не всегда может быть правдой, то кодер обязан разработать схему, чтобы отслеживать, какие элементы имеют хорошие значения в них.
В случае кода, который вы представили, похоже, что каждый элемент в этом массиве имеет допустимые значения soldier_type
, что, очевидно, является типом записи с логическим полем с именем Alive
. Кроме того факта, что он использует его для завершения цикла, я мало что могу рассказать вам об этом.
Хорошо, я полагаю, что могу сказать, что если ни у одной записи во всем этом массиве не установлен флаг Alive
, то у вас бесконечный цикл. Это, вероятно, не то, что вы хотели бы случиться. Кроме того, если бы это был я, я бы сделал массив из 1..max_number_of_soldiers только потому, что он читается лучше. Либо есть гораздо больше кода, работающего с этим массивом, который выглядит лучше, когда он основан на 0, либо кто-то является программистом на Си и испытывает проблемы с отказом от старых привычек.
Для документации, я бы посоветовал посмотреть сайты, перечисленные в вики тэга Ada . Если у вас есть особый интерес к функциям, определяемым языком, и тому подобное, вы должны знать, что полное справочное руководство по языку доступно онлайн (в отличие от многих других языков, которые я мог бы назвать). Я бы настоятельно рекомендовал просмотреть приложения A (предопределенная языковая среда), K (языковые атрибуты) и L (языковые прагмы). К, в частности, следует прочитать внимательно.