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

#1209. Переменные времени выполнения, итераторы и фильтры. Убираем использование @SELF. Только код

Код:

PROGRAM WasGenerated.ms.script

USES
 DogAndBracket.ms.dict
 // - в этом словаре описано слово @[
;

USES
 Testing.ms.dict
 // - в этом словаре описано слово Test&Dump
;

Test&Dump WasGenerated.ms.script.test

 : A
  //@SELF
  // - теперь это можно убрать, т.к. мы конструируем массив ссылок при помощи слова @[
  // - функция возвращает ссылку на саму себя
 ; // A

 : B
  //@SELF
  // - теперь это можно убрать, т.к. мы конструируем массив ссылок при помощи слова @[
  // - функция возвращает ссылку на саму себя
 ; // B

 : C
  //@SELF
  // - теперь это можно убрать, т.к. мы конструируем массив ссылок при помощи слова @[
  // - функция возвращает ссылку на саму себя
 ; // C

 @[ 
 // - слово @[ открываем массив ССЫЛОК, а не ЗНАЧЕНИЙ
  A A A B B B C C C A A A B B B C C C 
 ] 
 // - это массив ССЫЛОК на функции (слова)
 .filter> ( @ B != )
 // - отфильтровываем значения равные ссылке на B
 // ВАЖНО: тут сравниваем УКАЗАТЕЛИ на функции
 .map> pop:Word:Name 
 // - мапируем значение на вызов функции pop:Word:Name  
 .filter> ( 'C' != )
 // - отфильтровываем значения равные 'C'
 // ВАЖНО: тут сравниваем ИМЕНА на функций
 .for> 
 // - итерируем смапированные значения
 .
 // - печатаем каждое итерируемое значение

; // WasGenerated.ms.script.test

WasGenerated.ms.script.test

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

VOID TestWithDump WasGenerated.ms.script.test
 : A
 ; // : A
 
 : B
 ; // : B
 
 : C
 ; // : C
 
 WasGenerated.ms.script.test
 DumpElement
 ARRAY [
  @
  A
  @
  A
  @
  A
  @
  B
  @
  B
  @
  B
  @
  C
  @
  C
  @
  C
  @
  A
  @
  A
  @
  A
  @
  B
  @
  B
  @
  B
  @
  C
  @
  C
  @
  C
 ]
 (
  @
  B
  !=
 )
 SWAP
 Array:Filter
 pop:Word:Name
 SWAP
 Array:Map
 (
  'C'
  !=
 )
 SWAP
 Array:Filter
 .
 SWAP
 Array:Iterate
; // VOID TestWithDump WasGenerated.ms.script.test

A
A
A
A
A
A


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

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