пятница, 22 апреля 2016 г.

#1232. Скрипты. Получение копии массива. №2

[ ] array:Copy . // - получаем nil
[] array:Copy . // - получаем nil
[nil] array:Copy . // - получаем nil
[empty] array:Copy . // - получаем nil

[ ] array:CopyNotNil . // - получаем [ ]
[] array:CopyNotNil . // - получаем [ ]
[nil] array:CopyNotNil . // - получаем [ ]
[empty] array:CopyNotNil . // - получаем [ ]

[ 1 2 3 ] array:Copy . // - получаем [ 1 2 3 ]
[ 1 2 3 ] .filter> ( 2 != ) array:Copy . // - получаем [ 1 3 ]
[ 1 2 3 ] .filter> ( 2 == ) array:Copy . // - получаем [ 2 ]

[ 1 2 3 ] .map> ( 1 + ) array:Copy . // - получаем [ 2 3 4 ]
[ 1 2 3 ] .map> ( 2 + ) array:Copy . // - получаем [ 3 4 5 ]
[ 1 2 3 ] .map> ( 2 * ) array:Copy . // - получаем [ 2 4 6 ]

[ 1 2 3 ] .filter> ( 2 != ) .map> ( 1 + ) array:Copy . // - получаем [ 2 4 ]
[ 1 2 3 ] .filter> ( 2 == ) .map> ( 1 + ) array:Copy . // - получаем [ 3 ]

[ 1 2 3 4 ] .slice> 2 array:Copy . // - получаем [ 1 2 ] [ 3 4 ]
[ 1 2 3 4 5 6 ] .slice> 3 array:Copy . // - получаем [ 1 2 3 ] [ 4 5 6 ]

[ 1 2 3 4 ] .filter> IsOdd .slice> 2 array:Copy . // - получаем [ 1 3 ]
[ 1 2 3 4 ] .filter> IsEven .slice> 2 array:Copy . // - получаем [ 2 4 ]

[ 1 2 3 4 5 6 7 8 9 10 ] .filter> IsOdd array:Copy . // - получаем [ 1 3 5 7 9 ]
[ 1 2 3 4 5 6 7 8 9 10 ] .filter> IsEven array:Copy . // - получаем [ 2 4 6 8 10 ]

[ 1 2 ] .join> [ 3 4 ] array:Copy . // - получаем [ 1 2 3 4 ]
[ 1 2 ] .join> [ 3 4 ] .filter> IsOdd array:Copy . // - получаем [ 1 3 ]
[ 1 2 ] .join> [ 3 4 ] .filter> IsEven array:Copy . // - получаем [ 2 4 ]

[ 1 2 ] .join> [ 3 4 ] .map> ( 1 + ) array:Copy . // - получаем [ 2 3 4 5 ]
[ 1 2 ] .join> [ 3 4 ] .filter> IsOdd .map> ( 1 + ) array:Copy . // - получаем [ 2 4 ]
[ 1 2 ] .join> [ 3 4 ] .filter> IsEven .map> ( 1 + ) array:Copy . // - получаем [ 3 5 ]

[ 1 2 3 4 ] .join> [ 5 6 7 8 ] .filter> IsOdd .map> ( 1 + ) .slice> 2 array:Copy . // - получаем [ 2 4 ] [ 6 8 ]
[ 1 2 3 4 ] .join> [ 5 6 7 8 ] .filter> IsEven .map> ( 1 + ) .slice> 2 array:Copy . // - получаем [ 3 5 ] [ 7 9 ]

[ 1 2 3 4 ] .join> [ 5 6 7 8 ] .map> ( 1 + ) .filter> IsOdd .slice> 2 array:Copy . // - получаем [ 3 5 ] [ 7 9 ]
[ 1 2 3 4 ] .join> [ 5 6 7 8 ] .map> ( 1 + ) .filter> IsEven .slice> 2 array:Copy . // - получаем [ 2 4 ] [ 6 8 ]

[ 1 2 3 4 ] .reverted> array:Copy . // - получаем [ 4 3 2 1 ]
[ 1 2 ] .join> [ 3 4 ] .reverted> array:Copy . // - получаем [ 4 3 2 1 ]
[ 1 2 ] .join> [ 3 4 ] .map> ( 1 + ) .reverted> array:Copy . // - получаем [ 5 4 3 2 ]
[ 1 2 ] .join> [ 3 4 ] .filter> ( 2 != ) .map> ( 1 + ) .reverted> array:Copy . // - получаем [ 5 4 2 ]

Примеры:

BOOLEAN elem_func InheritsFrom
  ModelElement IN anAncestor
 anAncestor :Cached:
 ( 
  RULES
   ( Self IsNil )
    false
   ( Self anAncestor .IsSameType )
    true
   (
    Self .Inherits 
    .filter> ( anAncestor call.me )
    .CountIt > 0
   )
    true
   DEFAULT
    false 
  ; // RULES
 ) 
 >>> Result
; // InheritsFrom
...
ARRAY FUNCTION .filterNil>
  ARRAY IN anArray
 anArray
 .filter> ( IsNil ! ) 
 >>> Result
; // .filterNil>

...

ARRAY FUNCTION .filterMixIns>
  ARRAY IN anArray
 anArray
 .filter> ( .IsMixIn ! ) 
 // .filter> ( .IsPureMixIn ! )
 >>> Result
; // .filterMixIns>

...

ModelElement elem_func FirstOperation
 Cached:
 (
  Self .Operations .filter> ( .IsLocalMethod ! ) .FirstElement
 )
 >>> Result
; // FirstOperation

...

elem_iterator ForClassImplements
 Self .Implements 
 .filter> .IsClassImplementable
 >>> Result
; // ForClassImplements

...

elem_iterator PropertyKeys
 RULES
  ( Self .Parent .IsTestClass )
   (
    [ Self .Parent .EffectiveType .SelfParam ]
    .join>
    ( Self .Attributes )
   )
  DEFAULT 
   ( Self .Attributes )
 ; // RULES  
 .filter> ( .IsControlPrim ! )
 >>> Result
; // PropertyKeys

...
elem_iterator GlobalVars
 RULES
  ( Self .IsClassOrMixIn )
   (
    Self .Attributes
    .filter> ( .IsStereotype st_static::Attribute )
    if ( Self .IsSingleton ) then
    begin
     .join> ToArray: ( Self .InstanceField )
    end // ( Self .IsSingleton )
    .join> ( Self .InnerGlobalVars )
   )
  ( Self .IsUtilityPack ) 
   (
    Self .Attributes
    .filter> ( .IsProperty ! )
    .join> ( Self .InnerGlobalVars )
   )
  DEFAULT
   [empty] 
 ; // RULES
 >>> Result
; // GlobalVars

...

ARRAY FUNCTION .mapToTarget>
  ARRAY IN anArray
 anArray .map> .Target >>> Result
; // .mapToTarget>

...

elem_proc OutUses:
  STRING IN aUCPrefix
  ^ IN aUsed
  ^ IN aLambda
  ^ IN anItemTransform
  
 ARRAY VAR l_Used
 aUsed DO >>> l_Used
  
 ARRAY FUNCTION .filterUsed>
   ARRAY IN anArray
  anArray
  .filter> ( 
    IN anItem 
   anItem .UnitName >>> anItem 
   if ( anItem .NotInArray: l_Used ) then
   begin
    anItem .AddToArray: l_Used
    true
   end
   else
   begin
    false
   end 
  ) >>> Result  
 ; // .filterUsed> 
  
 'uses' .Out
   VAR l_NeedComma
   false >>> l_NeedComma
   Indented: ( 
    aLambda DO 
     .map> .UnitProducer 
     .filterNil> 
     .filterMixIns>
     .filter> ( Self ?!= )
     .filter> ( .UnitName Self .UnitName ?!= )
     .filter> ( .UnitName 'System' ?!= )
     //.map> .UnitName 
     .filterUsed> 
     .for> ( 
       IN anItem
      anItem .IfDef: ( anItem anItemTransform DO .WithComma: l_NeedComma .Out )
     ) // .for>
     
    if (
        ( Self .IsElementProxy )
        OR ( Self .UPisTrue "need UC" )
       ) then
    begin
     Self .UserCode: aUCPrefix ()
    end // ( Self .IsElementProxy )
    
    if (
        ( aUCPrefix 'intf_uses' == )
        AND ( Self .UPisTrue "need UC in project" )
       ) then
    begin
     Self .UserCode: 'manualuses' ()
    end // ( Self .IsElementProxy )
    
   ) // Indented:
 ';' .Out
 OutLn
; // OutUses:


Откуда "ноги растут":

http://programmingmindstream.blogspot.ru/2014/01/todo_24.html

Комментариев нет:

Отправить комментарий