четверг, 2 июля 2015 г.

ToDo. Сделать преобразование функтора к списку значений

Сделать преобразование функтора к списку значений:

A %ST // - возвращает непосредственный стереотип элемента
A %P // - возвращает непосредственного родителя элемента

Теперь про списки:

A LIST %ST // - возвращает список стереотипов элемента
A LIST %P // - возвращает родителей элемента

LIST устроен примерно так:

ARRAY operator LIST
 OBJECT IN %S
 // - элемент от которого получается список
 ^ IN aFunctor
 // - функтор получения элемента списка

 OBJECT VAR l_Element
 // - элемент списка
 l_Element := %S
 Result := 
  [ ( 
  // - открываем массив
   while true
   begin
    l_Element := ( l_Element aFunctor DO )
    // - вычисляем следующий элемент списка
    if ( l_Element pop:object:IsNil ) then
    // - достигли вершины списка элементов
     BREAK
     // - выходим из цикла
    l_Element
    // - добавляем элемент в массив
   end
  ) ]
  // - закрываем массив
; // LIST


1 комментарий: