7.5 Список (list)

 Список представляет собой пронумерованный одномерный набор однотипных объектов, например, скаляров, точек, векторов и т.д. Если в качестве элемента списка «А» указан список «В», то он входит в список «А» не как структурный элемент, а как набор содержащихся в нем элементов. Иначе это привело бы к созданию многомерной структуры с множественным индексированием.
В один список не могут входить объекты разных типов, даже если типы объектов совместимы. Объект типа ссылка (alias) может находиться в списке наравне с элементами того же типа, что и объект, на который он ссылается.
У списка имеется встроенный объект size (размер), определяющий текущее количество элементов в списке. Размер списка может меняться только в режиме редактирования, на этапе исследования размер списка фиксирован. Каждому элементу списка ставится в соответствие целое положительное число от 1 до size – индекс элемента. Список может не содержать ни одного элемента (быть пустым), значение size такого списка равно 0.
Ссылка на элемент списка осуществляется по индексу, указываемому в квадратных скобках после имени списка: L[1], L[n]. Ссылка на дочерний объект элемента списка осуществляется по имени, указываемому через точку после ссылки на элемент списка: L[1].gamma. Попытка обратиться к элементу пустого списка по индексу приведет к ошибке.
Список при определенных условиях может быть прикреплен к жесткому звену (тип body), а также к списку жестких звеньев. Условия прикрепления подробно рассмотрены в пункте «Прикрепление объектов к жестким звеньям» общей части раздела «Звено (body)» главы «Основные объекты».
Список объектов может быть объявлен параметром агрегата в проекте-прототипе и переопределен другим списком при создании агрегата. Размер списка должен быть не меньше размера переопределяемого параметра-списка, а типы элементов совместимы друг с другом. Также происходит проверка корректности ссылок на список, его элементы и размер. Нельзя переопределять параметр-список в случае, если это приводит к изменению размеров некоторого списка, на элементы которого есть ссылки (т.е. элементы которого используются при создании какого-либо другого объекта описания ММС). Это происходит по той причине, что при изменении размеров списка происходит удаление всех его элементов, а удаление объектов в ПК EULER возможно только вместе с удалением всех зависимых от него объектов, что привело бы в данном случае к изменению проекта-прототипа агрегата, что невозможно. Те же ограничения срабатывают в случае снятия переопределения; в такой ситуации можно внести нужные изменения в проект в Текстовом редакторе.
Особенности работы со списками
Зачастую списки используются в методах создания других объектов, например, при создании датчика «Массово-инерционные характеристики группы звеньев» (sensor MIP) указывается список звеньев:
MIP(Node, list(Body1, …))
В этом случае вместо конструкции вида «list(Body1, …)» может указываться имя списка звеньев (в настоящей версии программного комплекса данная возможность доступна только в Текстовом редакторе), созданного одним из методов:
//пусть N – узел, B1, B2, B3 – звенья
list LB=list( B1, B2, B3 );
sensor_array sensor_MIP=MIP( N, LB );
Это будет равносильно следующей записи:
sensor_array sensor_MIP=MIP( N, list( B1, B2, B3 ) );
В настоящей версии программного комплекса нельзя использовать в таких случаях «смешанные» списки, содержащие как объекты типа звено, так и объекты типа список звеньев:
//пусть B4, B5 – звенья
//следующая запись недопустима
//sensor_array sensor_MIP=MIP( N, list( LB, B4, B5 ) );
В этом случае надо предварительно создать список, а затем использовать его при создании датчика:
list LB2=list( LB, B4, B5 );
sensor_array sensor_MIP=MIP( N, LB2 );
Внутренние системные объекты
scalar size [–]
Размер списка.
Методы создания