среда, 2 декабря 2015 г.

#1215. Переменные времени выполнения, итераторы и фильтры. Модифицируем слово Print. Только код

Код:

UNIT io.ms.dict

USES
 types.ms.dict
;

USES
 core.ms.dict
;

ANY TYPE PRINTABLE

BOOLEAN FUNCTION .IsTfwWord 
  PRINTABLE IN aValue
 ( aValue IsObj ) AND ( aValue IS class::TtfwWord ) >>> Result
; // .IsTfwWord

PROCEDURE Print
 PRINTABLE IN aValue
 if ( aValue .IsTfwWord ) then
 begin
  aValue |N .
 end
 else
 if ( aValue IsArray )  then
 begin
  [ 
   '[' 
    aValue .for> ( 
      PRINTABLE IN aValue
     if ( aValue .IsTfwWord ) then
     begin
      aValue |N
     end
     else
     begin
      aValue ToPrintable 
     end
    ) 
   ']' 
  ] ' ' strings:CatSep .
 end
 else
 begin
  aValue .
 end
; // Print

Вывод на печать:

VOID TestWithDump WasGenerated.ms.script.test
 %SUMMARY %SUM
  'Метод WasGenerated.ms.script.test'
 ; // %SUMMARY %SUM
 
 BOOLEAN FUNCTION .WasGenerated
  %SUMMARY %SUM
   'Определяет тот факт, что слово aWord уже использовалось для генерации'
  ; // %SUMMARY %SUM
  
  TtfwWord IN aWord
  aWord
  g_WasGenerated
  array:Has
  !
  ?
  (
   aWord
   >>>[]
   g_WasGenerated
  )
  false
  Result
  pop:Word:SetValue
 ; // BOOLEAN FUNCTION .WasGenerated
 
 : A
  %SUMMARY %SUM
   'Метод A'
  ; // %SUMMARY %SUM
  
 ; // : A
 
 : B
  %SUMMARY %SUM
   'Метод B'
  ; // %SUMMARY %SUM
  
 ; // : B
 
 : C
  %SUMMARY %SUM
   'Метод C'
  ; // %SUMMARY %SUM
  
 ; // : C
 
 ARRAY STATIC-VAR g_WasGenerated
 WasGenerated.ms.script.test
 DumpElement
 ARRAY [
  @
  A
  @
  A
  @
  A
  @
  B
  @
  B
  @
  B
  @
  C
  @
  C
  @
  C
  @
  A
  @
  A
  @
  A
  @
  B
  @
  B
  @
  B
  @
  C
  @
  C
  @
  C
 ]
 (
  .WasGenerated
  !
 )
 SWAP
 Array:Filter
 (
  @
  B
  !=
 )
 SWAP
 Array:Filter
 pop:Word:Name
 SWAP
 Array:Map
 (
  'C'
  !=
 )
 SWAP
 Array:Filter
 Print
 SWAP
 Array:Iterate
 g_WasGenerated
 Print
; // VOID TestWithDump WasGenerated.ms.script.test

A
A
A
A
A
A
[ A B C ]


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

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