вторник, 1 марта 2016 г.

#1195. Эмуляция for..to

http://blog.marcocantu.com/blog/2016-february-stepping-values-for-loop.html

https://bitbucket.org/lulinalex/mindstream/commits/54a55b7cdfd83633727028150df2b5d8412ac44c

Test ForToTest

 ARRAY operator to 
   ^@ IN aFrom
   ^ IN aTo
  @ ( 
   OBJECT IN aLambda
   INTEGER VAR I
   I := ( aFrom DO )
   Dec I
   ( aTo DO I ) - LOOP ( Inc I I aLambda DO ) 
  ) FunctorToIterator >>> Result
 ; // 1to
 
 for ( 1 to 10 ) .
 // - печатает числа от 1 до 10
 '' .
 for ( 1 to 20 ) .
 // - печатает числа от 1 до 20
 '' .
 for ( 0 to 20 ) .
 // - печатает числа от 0 до 20
 '' .
 for ( -1 to 20 ) .
 // - печатает числа от -1 до 20
 '' .
 for ( -1 to 21 ) .
 // - печатает числа от -1 до 21
 '' .
 0 for ( 1 to 10 ) + .
 // - суммирует числа от 1 до 10 и печатает результат
 '' .
 for ( 1 to 10 Reverted ) .
 // - печатает числа от 10 до 1
 
/*{ 
 ARRAY VAR L
 
 1to 10 >>> L
 
 @ . L ITERATE
 // - печатает числа от 1 до 10
 '' .
 @ . 1to 20 ITERATE
 // - печатает числа от 1 до 20
 '' .
 0 @ + L ITERATE .
 // - суммирует числа от 1 до 10 и печатает результат
 '' .
 @ . L Reverted ITERATE
 // - печатает числа от 10 до 1}*/
; // ForToTest

ForToTest

Понятно, что step несложно добавить - в Inc I - написать I := I + Step

У меня по-моему "несколько лаконичнее" вышло, чем у гуру.

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

  1. Понятно, что step несложно добавить - в Dec I - написать I := I - Step

    ОтветитьУдалить